从数据框创建文本字符串

时间:2018-10-16 00:06:39

标签: r

我想从数据框创建文本字符串,但是指定哪些行将添加到文本字符串中。

这是一个示例数据框:

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列。

感谢您的帮助。

2 个答案:

答案 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创建。