输入是:
data.frame(rbind(c("3,2,98"),c("5,3,1")))
想要的输出表是
3 2 98 5 1
1. 1 1 1 0 0
2. 1 0 0 1 1
有什么建议吗?
答案 0 :(得分:4)
如果您的数据与您在问题(字符串)中显示的内容非常相似,我建议{" splitstackshape"}中的concat.split.expanded
。包(开发版)。
以下是您获得礼包的方式:
library(devtools)
install_github(repo = "splitstackshape", username = "mrdwab", ref = "devel")
library(splitstackshape)
这是您的数据。我添加了一个比您在问题中分享的更好的变量名称。
X <- data.frame(V1 = rbind(c("3,2,98"),c("5,3,1")))
这是分裂步骤。如果您不想保留原始列,请添加drop = TRUE
。
concat.split.expanded(X, split.col = "V1", sep = ",",
type = "character", fill = 0)
# V1 V1_1 V1_2 V1_3 V1_5 V1_98
# 1 3,2,98 0 1 1 0 1
# 2 5,3,1 1 0 1 1 0
如果您的数据更像以下内容:
X2 <- data.frame(matrix(c(3, 2, 98, 5, 3, 1), nrow = 2, byrow = TRUE))
X2
# X1 X2 X3
# 1 3 2 98
# 2 5 3 1
...然后可以使用table
方法(与stack
结合使用):
table(cbind(rn = sequence(nrow(X2)), stack(X2))[c("rn", "values")])
# values
# rn 1 2 3 5 98
# 1 0 1 1 0 1
# 2 1 0 1 1 0