r - 有没有办法粘贴带有列名的语句并使用它在 R 中创建一个新列?
问题描述
我有一个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'))
我想沿着那些说的列创建一些测试用例
'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)
但是,它看起来并不好,有时我有100多个测试用例和很长的字符串。
无论如何我可以像这样粘贴结果吗?
df$tc <- paste(string, df$X4)
还是有更聪明的方法?
提前致谢!
解决方案
我们可以do.call
使用paste
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"
或reduce
与str_c
library(dplyr)
library(purrr)
library(stringr)
df %>%
mutate(tc = reduce(., str_c, sep=" & "))
推荐阅读
- python - 如何在背景中创建带有图像的散景图?
- profiling - 以下 sysbench 版本的底层实现是否存在重大差异:0.4.12 vs 1.0.17
- data-structures - 我们可以使用二叉搜索树来表示图吗?
- javascript - webpack.config.js 中 module.exports 的目标是什么?
- swift - 基本认证 URLSession POST
- ios - 基于段控制的错误接口
- sql - 如何组合两个条件不同的 SQL 查询?
- generics - Kotlin 中的方差/协方差泛型
- java - 在不同的微服务中读取已经验证的 JWT 令牌
- python - 使用python合并来自不同数据框的多列