我想从数据框创建文本字符串,但是指定哪些行将添加到文本字符串中。
这是一个示例数据框:
x <- as.data.frame(matrix(nrow = 4, ncol = 2))
x$V1 <- c(1, 1, 1, 2)
x$V2 <- c("aa", "bb", "cc", 1)
x$V3 <- c(1, 2, 3, NA
我只想在x$V1 = 1
处构建文本字符串。
我正在寻找的结果类似于"aa 1 bb 2 cc 3"
,其中x$V1 = 2
所在的行被忽略以生成文本字符串。
我尝试了以下方法:
x$V4 <- for(i in 1:length(x$V1)){
if (x[i, 1] == 1){
paste(x[i,2], x[i,3])
} else {""}
}
paste(x$V3, collapse = "")
上面的代码甚至没有在我的数据框中创建一个V4
列。
感谢您的帮助。
答案 0 :(得分:1)
这里是使用基数R的单行解决方案-
do.call(paste, c(x[x$V1 == 1, -1], collapse = " "))
[1] "aa 1 bb 2 cc 3"
答案 1 :(得分:0)
您可以使用.replace
来执行此操作。通常,您无法以尝试的方式从ifelse
循环进行分配;您应该从循环内部进行分配。但是最好避免循环。
for
由reprex package(v0.2.0)于2018-10-15创建。