当我对数据进行子集化时,我要么基于某些值进行子集化,要么跨如下一组行:
# Subset on some values
df<-df[df$A=='some values',]
# Subset on Group of Rows
df<-df[1:10,]
但是,有没有办法将这两种方法结合起来?
我需要能够获取数据帧的前7行,然后使用条件搜索一列,并在另一列中返回值。
所以,如果我有此数据:
col_with_conditions<-c(1,2,3,4,5,1,2,3,4,5)
col_to_return<-c(10,10,10,20,20,20,10,20,10,20)
df<-data.frame(col_with_conditions,col_to_return)
col_with_conditions col_to_return
1 10
2 10
3 10
4 20
5 20
1 20
2 10
3 20
4 10
5 20
我想搜索值1和2,然后返回col_to_return
中的第一个值。在此示例中,代码将返回10.
另一个例子:
col_with_conditions<-c(5,2,2,3,4,5)
col_to_return<-c(20,10,10,10,20,10)
df<-data.frame(col_with_conditions,col_to_return)
也将返回10
。
另一个例子:
col_with_conditions<-c(5,2,4,3,4)
col_to_return<-c(20,20,20,10,20)
df<-data.frame(col_with_conditions,col_to_return)
将返回20.
但是,此示例:
col_with_conditions<-c(5,3,4,3,4)
col_to_return<-c(20,20,20,10,20)
df<-data.frame(col_with_conditions,col_to_return)
应返回NA
,我可以将其转换为其他地方的0
。有时数据框并不总是具有这些值1 or 2.
这一步可以做到吗?
答案 0 :(得分:1)
一种方法是
df$col_to_return[df$col_with_conditions[1:7] %in% c(1, 2)][1]
#[1] 10
如果没有与条件匹配的值,它将返回NA
。
答案 1 :(得分:1)
使用dplyr
来提高可读性:
library(dplyr)
df %>%
head(7) %>%
filter(col_with_conditions %in% c(1, 2)) %>%
.$col_to_return %>%
.[1]
应该返回您想要的东西。