有没有一种方法可以粘贴一个带有列名的语句,然后用它在R中创建一个新的列?

问题描述 投票:0回答:1

我有一个df。

df <- data.frame(X1 = c('1','0', '1','1', '1'), X2 = c('1','0', '1','0', '1'), X3 = c('1','0', '1','0', '1'), X4 = c('1','0', '1','0', '1'))

我想沿着coloumns创建一些testcases,上面写着

'1 & 0 & 1 & 1 & 1' 。

以此类推,每一行都是如此。我的预期输出是

df <- data.frame(X1 = c('1','0', '1','1', '1'), X2 = c('1','0', '1','0', '1'), X3 = c('1','0', '1','0', '1'), X4 = c('1','0', '1','0', '1'), tc= c("1 & 1 & 1 & 1", "0 & 0 & 0 & 0", "1 & 1 & 1 & 1", "1 & 0 & 0 & 0", "1 & 1 & 1 & 1"))

我不知道这是不是最简单的方法。但我用noquote,toString和lapply建立了一个字符串。

string <-  noquote(toString(lapply(1:3, function(x){noquote(sprintf("df$X%s, '&'", x))})))
string
#df$X1, '&', df$X2, '&', df$X3, '&'

然后尝试用粘贴来激活它


df$tc <- paste(string, df$X4)

然而,它只粘贴了X4的最后一个值,使我的测试案例看起来像。

head(df$tc)

[1] "df$X1, '&', df$X2, '&', df$X3, '&' 1" "df$X1, '&', df$X2, '&', df$X3, '&' 0"
[3] "df$X1, '&', df$X2, '&', df$X3, '&' 1" "df$X1, '&', df$X2, '&', df$X3, '&' 0"
[5] "df$X1, '&', df$X2, '&', df$X3, '&' 1"

我找到的唯一解决办法是把我创建的字符串复制到一个粘贴语句里


df$tc <-paste(df$X1, '&', df$X2, '&', df$X3, '&', df$X4)

但是,看起来并不好看,有时我的testcases超过100个,字符串很长。

有没有什么办法可以让我像这样把结果粘贴进去。

df$tc <- paste(string, df$X4)

或者有更聪明的方法吗?

先谢谢你了

r string dataframe paste
1个回答
2
投票

我们可以用 do.callpaste

df$tc <- do.call(paste, c(df, sep=" & "))
df$tc
#[1] "1 & 1 & 1 & 1" "0 & 0 & 0 & 0" "1 & 1 & 1 & 1" "1 & 0 & 0 & 0" "1 & 1 & 1 & 1"

或与 reducestr_c

library(dplyr)
library(purrr)
library(stringr)
df %>%
    mutate(tc = reduce(., str_c, sep=" & "))

2
投票

补充方案

library(stringr)
df$tc <- apply(df, 1, function(x) str_c(x, collapse = " & "))
© www.soinside.com 2019 - 2024. All rights reserved.