提问人:MMamone 提问时间:10/31/2023 更新时间:10/31/2023 访问量:48
我可以使用“function”命令来调用日期帧的某些行吗?[关闭]
Can I use the "function" command to call certain rows of a dateframe? [closed]
问:
我有一个数据帧,其中包含许多站点的物种存在/缺失数据。这是它外观的基本表示形式。
df=data.frame(site=c("site1","site1","site1","site2","site2","site2"),
speciesA=c(0,1,0,1,1,0),speciesB=c(0,0,0,1,0,1),speciesC=c(1,0,1,1,1,1))
我希望能够单独处理特定站点(也就是站点列中具有相同名称的特定行)。
我能够使用子集来隔离一个站点。
subset(df[df$site=="site1", ])
我尝试使用一个函数为所有站点执行此操作,而无需写出完整的代码,
sitename<-function(s){
subset(df[df$site=="s", ])
}
sitename(site2)
但这会返回 <0 行>(或 0 长度的 row.names)。
答:
2赞
phydev
10/31/2023
#1
问题是你的输入变量在引号内。此外,在传递输入时应使用引号。请尝试以下操作:
sitename <- function(s){
df[df$site==s, ]
}
sitename("site2")
编辑:正如其他人所注意到的那样,这里完全没用。subset()
评论
0赞
r2evans
10/31/2023
subset
在这里不做任何事情,不应该以编程方式使用。这应该与 完全相同。df[df$site==s, ]
1赞
phydev
10/31/2023
同意,但子集的使用不是问题的原因。它不是必需的,但它有效。无论如何,我删除了它。
3赞
r2evans
10/31/2023
我同意冗余不是问题,坦率地说,我认为这个答案解释了真正的问题,而两个答案都解决了它。我认为这要么是错别字,要么是编程学习时刻,其中 != ,正如您所强调的。希望 OP 能够实现实际的收获,并可能了解 -caution。=="s"
==s
subset
2赞
MrFlick
10/31/2023
#2
您在此处使用子集有点多余,因为您也在索引数据框。您应该使用
sitename <- function(s){
subset(df, site==s)
}
或
sitename <- function(s){
df[df$site==s, ]
}
以及
sitename("site1")
评论
0赞
phydev
10/31/2023
冗余不是代码不起作用的原因。看看我的答案。
评论
"s"
s
"s"
subset(df, site == s)
df[df$site == s, ]
?subset
:“这是一个旨在以交互方式使用的便利功能。对于编程,最好使用像[
这样的标准子集函数,特别是对参数“子集”的非标准计算可能会产生意想不到的后果。我可以确认,以编程方式使用 of 失败并不难,有时是无声的。subset
subset
subset=
select=
subset(.)
"s"
get
mget
`[`
`[[`
df[, "s"]
==
"s"
s