2014-06-12 13 views
7
> dc1 
    V1    V2 
1 20140211-0100  |Box 
2 20140211-1782  |Office|Ball 
3 20140211-1783  |Office 
4 20140211-1784  |Office 
5 20140221-0756  |Box 
6 20140203-0418  |Box 
> strsplit(as.character(dc1[,2]),"^\\|") 
[[1]] 
[1] "" "Box" 


[[2]] 
[1] ""    "Office" "Ball" 


[[3]] 
[1] ""    "Office" 


[[4]] 
[1] ""    "Office" 


[[5]] 
[1] "" "Box" 


[[6]] 
[1] "" "Box" 

Làm thế nào để tôi loại bỏ các trống ("") từ strsplit kết quả results.The nên hình như:loại bỏ khoảng trống từ strsplit trong R

[[1]] 
[1] "Box" 
[[2]] 
[1] "Office" "Ball" 
+0

Kết quả của bạn không được hiển thị nếu bạn sử dụng "^ \\ |", nhưng '[[2]] [1]" "" Office | Ball "' – Math

Trả lời

7

Bạn có thể kiểm tra sử dụng lapply trên danh sách của bạn. Tôi đã thay đổi định nghĩa của strsplit để phù hợp với đầu ra dự định của bạn.

dc1 <- read.table(text = 'V1    V2 
1 20140211-0100  |Box 
2 20140211-1782  |Office|Ball 
3 20140211-1783  |Office 
4 20140211-1784  |Office 
5 20140221-0756  |Box 
6 20140203-0418  |Box', header = TRUE) 

out <- strsplit(as.character(dc1[,2]),"\\|") 

> lapply(out, function(x){x[!x ==""]}) 
[[1]] 
[1] "Box" 

[[2]] 
[1] "Office" "Ball" 

[[3]] 
[1] "Office" 

[[4]] 
[1] "Office" 

[[5]] 
[1] "Box" 

[[6]] 
[1] "Box" 
3

Tôi không có một giải pháp toàn cầu, nhưng ví dụ của bạn, bạn có thể thử:

strsplit(sub("^\\|", "", as.character(dc1[,2])),"\\|")

Nó loại bỏ các | đầu tiên (đây là những gì các regex "^\\|" nói), đó là lý do cho số "", trước khi thực hiện chia tách.

2

Trong trường hợp này, bạn chỉ có thể loại bỏ các yếu tố đầu tiên của mỗi vector bằng cách gọi "[" trong sapply

> sapply(strsplit(as.character(dc1[,2]), "\\|"), "[", -1) 
# [[1]] 
# [1] "Box" 

# [[2]] 
# [1] "Office" "Ball" 

# [[3]] 
# [1] "Office" 

# [[4]] 
# [1] "Office" 

# [[5]] 
# [1] "Box" 

# [[6]] 
# [1] "Box" 
3

Bạn có thể sử dụng:

library(stringr) 
str_extract_all(dc1[,2], "[[:alpha:]]+") 
[[1]] 
[1] "Box" 

[[2]] 
[1] "Office" "Ball" 

[[3]] 
[1] "Office" 

[[4]] 
[1] "Office" 

[[5]] 
[1] "Box" 

[[6]] 
[1] "Box" 
2

Phương pháp khác sử dụng nzchar() sau unlisting kết quả của strsplit():

out <- unlist(strsplit(as.character(dc1[,2]),"\\|")) 

out[nzchar(x=out)] # removes the extraneous "" marks 
0
library("stringr") 

lapply(str_split(dc1$V2, "\\|"), function(x) x[-1]) 

[[1]] 
[1] "Box" 

[[2]] 
[1] "Office" "Ball" 

[[3]] 
[1] "Office" 

[[4]] 
[1] "Office" 

[[5]] 
[1] "Box" 

[[6]] 
[1] "Box" 
Các vấn đề liên quan