作为 R 中的新手,如何正确处理具有多个值的变量:
x = c("1","1","1/2","2","2/3","1/3")
如您所见,值 3 仅与其他值一起出现。
为了x
进一步计算,最好的方法是获得 3 个向量,例如:
X[1] = c(1,1,1,NA,NA,1)
因为“1”出现在第 1、第 2、第 3 和第 6 位。X[2]
与和同上X[3]
这样做似乎保留了所有信息:我错了吗?
我已经测试了 strsplit 但它没有保留NA
我的向量中还没有的值。
作为 R 中的新手,如何正确处理具有多个值的变量:
x = c("1","1","1/2","2","2/3","1/3")
如您所见,值 3 仅与其他值一起出现。
为了x
进一步计算,最好的方法是获得 3 个向量,例如:
X[1] = c(1,1,1,NA,NA,1)
因为“1”出现在第 1、第 2、第 3 和第 6 位。X[2]
与和同上X[3]
这样做似乎保留了所有信息:我错了吗?
我已经测试了 strsplit 但它没有保留NA
我的向量中还没有的值。
另一种方法是cSplit_e
从我的“splitstackshape”包中使用。
x = c("1","1","1/2","2","2/3","1/3")
library(splitstackshape)
cSplit_e(data.frame(x), "x", "/")
# x x_1 x_2 x_3
# 1 1 1 NA NA
# 2 1 1 NA NA
# 3 1/2 1 1 NA
# 4 2 NA 1 NA
# 5 2/3 NA 1 1
# 6 1/3 1 NA 1
(请注意,与接受的答案中的结果相比,此处的结果是转置的。)
这似乎有效:
x = c("1","1","1/2","2","2/3","1/3")
#Split on your character. This may not be inclusive of all characters that
#need to be split on.
xsplit <- strsplit(x, "\\/")
#Find the unique items
xunique <- unique(unlist(xsplit))
#Iterate over each xsplit for all unique values
out <- sapply(xsplit, function(z)
sapply(xunique, function(zz) zz %in% z)
)
#convert FALSE to NA
out[out == FALSE] <- NA
#Results in
> out
[,1] [,2] [,3] [,4] [,5] [,6]
1 TRUE TRUE TRUE NA NA TRUE
2 NA NA TRUE TRUE TRUE NA
3 NA NA NA NA TRUE TRUE