2014-06-09 17 views
5

Tôi đang làm việc trên tập dữ liệu Twitter trong R và tôi thấy khó xóa tên người dùng khỏi tweets.Mẫu thay thế trong R

Đây là một ví dụ về các tweets trong cột tweet của tập dữ liệu của tôi:

[1] "@danimottale: 2 bad our inalienable rights offend their sensitivities. U cannot reason with obtuse zealotry. // So very well said."   
[2] "@FreeMktMonkey @drleegross Want to build HSA throughout lifetime for when older thus need HDHP not to deplete it if ill before 65y/o.thanks" 

Tôi muốn xóa/thay thế tất cả các từ bắt đầu bằng "@" để có được kết quả này:

[1] "2 bad our inalienable rights offend their sensitivities. U cannot reason with obtuse zealotry. // So very well said."   
[2] "Want to build HSA throughout lifetime for when older thus need HDHP not to deplete it if ill before 65y/o.thanks" 

Hàm gsub này hoạt động để xóa biểu tượng "@".

gsub("@", "", tweetdata$tweets) 

Tôi muốn nói, xóa ký tự sau biểu tượng văn bản cho đến khi bạn gặp dấu cách hoặc dấu chấm câu.

tôi bắt đầu cố gắng để chỉ đối phó với không gian nhưng không có kết quả:

gsub("@.*[:space:]$", "", tweetdata$tweets) 

này loại bỏ các tweet thứ hai hoàn toàn

gsub("@.*[:blank:]$", "", tweetdata$tweets) 

này không thay đổi sản lượng.

Tôi sẽ rất biết ơn sự giúp đỡ của bạn.

Trả lời

9

Bạn có thể sử dụng các mục sau. \S+ khớp với bất kỳ không khoảng trắng ký tự (1 hoặc nhiều lần hơn), theo sau là khớp một ký tự riêng lẻ.

gsub('@\\S+\\s', '', noRT$text) 

Working Demo

EDIT: Một trận đấu phủ nhận sẽ làm việc tốt cũng (chỉ sử dụng nhân vật gian)

gsub('@[^ ]+ ', '', noRT$text) 
+1

Rất cám ơn - rất hữu ích, quá tệ tôi không thể bỏ phiếu vì tôi mới. – user3722736

+1

@ user3722736 Bạn có thể kiểm tra giải pháp này nếu nó phù hợp với nhu cầu của bạn mặc dù bằng cách nhấp vào dấu kiểm bên trái bên dưới số phiếu bầu lên. –

+0

Sử dụng 'phụ' thay vì' gsub' vì chỉ có một thay thế. –

1

Phương pháp regex ở đây rất dễ dàng và thẳng về phía trước. Tôi đang thêm tùy chọn thứ hai cho phép bạn xóa văn bản giữa bất kỳ 2 đường biên nào bằng cách sử dụng chức năng genX của qdap. Điều này cho phép bạn cung cấp một ranh giới trái và phải.

library(qdap) 
genX(x, "@", "\\s") 

## [1] "2 bad our inalienable rights offend their sensitivities. U cannot reason with obtuse zealotry. // So very well said." 
## [2] "Want to build HSA throughout lifetime for when older thus need HDHP not to deplete it if ill before 65y/o.thanks"  
+1

Cảm ơn bạn, thật tuyệt khi thấy một giải pháp khác. Tôi ước tôi có thể bình chọn câu trả lời của bạn nhưng tôi chưa có danh tiếng. – user3722736

Các vấn đề liên quan