gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 01:02:00 25 4
gpt4 key购买 nike

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

我有一个数据框 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com