使用R从数据帧中子集表列
下面数据框中的一列(使用R从数据帧中子集表列,r,dataframe,R,Dataframe,下面数据框中的一列(new)是一个表 #dput(头部(df1)) 结构(列表a=c(1,2,3,4,5,7),b=c(2,3,3,5,5, 7) ,c=c(1,3,2,4,5,7),new=list(结构)(2:1,.Dim=2L,.Dimnames=structure(列表( c(“1”、“2”)、.Names=“”)、class=“table”)、结构(1:2、.Dim=2L、.Dimnames=structure(列表( c(“2”,“3”),.Names=“”),class=“tabl
new
)是一个表
#dput(头部(df1))
结构(列表a=c(1,2,3,4,5,7),b=c(2,3,3,5,5,
7) ,c=c(1,3,2,4,5,7),new=list(结构)(2:1,.Dim=2L,.Dimnames=structure(列表(
c(“1”、“2”)、.Names=“”)、class=“table”)、结构(1:2、.Dim=2L、.Dimnames=structure(列表(
c(“2”,“3”),.Names=“”),class=“table”),结构(1:2,.Dim=2L,.Dimnames=structure(列表(
c(“2”,“3”),.Names=“”),class=“table”),结构(2:1,.Dim=2L,.Dimnames=structure(列表(
c(“4”,“5”),.Names=“”),class=“table”),结构(c(`5`=3L),.Dim=1L,.Dimnames=structure(list(
“5”),.Names=“”),class=“table”),结构(c(`7`=3L),.Dim=1L,.Dimnames=structure(list(
“7”),.Names=“”),class=“table”)),row.Names=c(NA,
6L),class=“数据帧”)
new
列是apply(df1,1,table)
的结果。
使用df1[4,“new”][[1]]
生成以下输出
df1[4,“新”][[1]]
#4.5-->VAL
#2 1-->频率
我想制定一个条件,比如给我所有Vals
,其中new
列中的Freq
大于或等于某个条件,并使用它来子集new
列
下面是一个例子,以及我到目前为止所做的工作
df1[4,“新”][[1][]>=2
# 4 5
#真假
#使用上述逻辑规则进行子集设置
as.integer(名称(df1[4,“新”][[1]][df1[4,“新”][[1]][]]>=2]))
#[1] 4
结果正是我所期望的。然而,它是冗长的,如果有一个较短的版本,我会很高兴(目前这不是一个紧迫的问题,尽管我会很感激,也很高兴能学会写清楚简洁的句子)
我面临的紧迫问题是如何将条件修改为.integer(名称(df1[4,“new”][[1]]][df1[4,“new”][[1]][]>=2])
并将其应用于整个列。例如,对于条件列new==3
,5
和7
是预期的输出
我看过类似的文章,但没有帮助我弄明白如何将子集条件应用于一个列,即一个表
多谢各位 调查对象(即列)的
类
,得到“列表”
通常我们使用例如lappy()
函数将函数应用于列表的元素。为了获得向量或矩阵而不是列表,我们可以尝试sapply
那么,定义你的条件
COND <- 2
你能确切地说明你想要归还什么吗?如果条件>3,是否要返回最后两行?还是只包含5和7的向量?如果条件>=2怎么办?你能把所有的行都还回去吗?谢谢。我想要的输出就是
5
和7
;当条件为=2
时,将从满足条件的new
列中获得特定值(names
)。感谢并指出我必须unlist
以获得与您类似的输出,这正是我想要的。非常感谢。
COND <- 2
sapply(df1$new, function(x) as.numeric(names(x[x >= COND])))
# [1] 1 3 3 4 5 7