r - 在 R 中,根据不同列中的字​​符串提取行

标签 r dataframe

很抱歉,如果我的问题的解决方案已经存在,而我忽略了它。有很多类似的主题都帮助我理解了我正在尝试做的事情的基础知识,但并没有完全解决我的确切问题。

我有一个数据框 df:

> type = c("A","A","A","A","A","A","B","B","B","B","B","B")
> place = c("x","y","z","x","y","z","x","y","z","x","y","z")
> value = c(1:12)
> 
> df=data.frame(type,place,value)
> df
   type place value
1     A     x     1
2     A     y     2
3     A     z     3
4     A     x     4
5     A     y     5
6     A     z     6
7     B     x     7
8     B     y     8
9     B     z     9
10    B     x    10
11    B     y    11
12    B     z    12
> 

(我的真实数据在类型上有 3 个不同的值,在适当的位置有 10 个值,如果有区别的话)

我想根据 m 和 n 列中的字符串提取行。 例如。我想提取所有类型为 A 且位置为 x 和 z 的行,或所有类型为 A 和 B 且位置为 y 的行。

这对 subset 非常有效,但我想在提取行的不同组合上运行我的脚本,并且每次调整 subset 命令不是很有效。

我想使用一个向量,其中包含分别从类型和位置获取的元素作为元素。

我试过:

v=c("A","x","z")
df.extract <- df[df$type&df$place %in% v]

但这会返回一个错误。

我是 R 和编程的初学者,所以请多多包涵。

最佳答案

你可以试试

df[df$type=='A' & df$place %in% c('x','y'),]
#   type place value
#1    A     x     1
#2    A     y     2
#4    A     x     4
#5    A     y     5

对于第二种情况

df[df$type %in% c('A', 'B') & df$place=='y',]

更新

假设您有很多列,并且需要根据来自许多列的值对数据集进行子集化。例如。

 set.seed(24)
 df1 <- cbind(df, df[sample(1:nrow(df)),], df[sample(1:nrow(df)),])
 colnames(df1) <- paste0(c('type', 'place', 'value'), rep(1:3, each=3))
 row.names(df1) <- NULL

您可以从感兴趣的列中创建值的列表

 v1 <- setNames(list('A', 'x', c('A', 'B'),
          'x', 'B', 'z'), paste0(c('type', 'place'), rep(1:3, each=2)))

然后使用Reduce

 df1[Reduce(`&`,Map(`%in%`, df1[names(v1)], v1)),]

关于r - 在 R 中,根据不同列中的字​​符串提取行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27507874/

相关文章:

R:在对象生成器中使用事件绑定(bind)有条件地向 R6 对象添加新类

python - matplotlib 中的 R 风格数据轴缓冲区

r - 使用 devtools::install_github() 安装无法检测到构建工具

r - R 中未使用的参数

r - 随着数据框变大,如何防止 rbind() 变得非常慢?

python - Pandas 根据拆分另一列添加新列

python - 具有 MultiIindex 和 .combine_first 的 Pandas DataFrame 无法按预期工作

r - 在 R 中编写每列具有不同小数位数的数据框

根据多个条件替换 data.frame 上的值

python - 从列表创建数据框