如何解决R-根据参数 数据
我有一个数据帧列表,为了对它们进行单独的统计,我将这些数据帧进行了划分。数据框具有要基于行中的值提取的列的名称。以在df_list
中编译的这些数据帧为例:
$df1
aa bb cc
a 9 9 2
b 9 9 6
c 2 10 5
d 2 9 6
e 3 4 7
$df2
aa bb cc
a 2 4 3
b 2 8 2
c 6 4 3
d 9 5 8
e 1 5 4
$df3
aa bb cc
a 1 8 2
b 1 8 9
c 4 1 2
d 9 9 8
e 9 7 3
如果第e行大于5,我想获取列的名称。因此,我将在同一列表或全新列表中获得类似以下的输出:
$df1
[1] "cc"
$df2
NULL #or integer(0),I'm not quite sure what I would see here
$df3
[1] "aa" "bb"
names_list <- lapply(df_list,function(x) colnames(x))
$df1
[1] "aa" "bb" "cc"
$df2
[1] "aa" "bb" "cc"
$df3
[1] "aa" "bb" "cc"
这是大于5列的代码行:
num_list <- lapply(df_list,function(x) which(x[c("e"),] > 5))
$df1
[1] 3
$df2
integer(0)
$df3
[1] 1 2
尽管最后两个结果令人鼓舞,但我似乎无法将两个想法联系在一起以获得所需的输出。嵌套它们会给我带来我无法识别的无数错误。有可行的方法吗?有没有更有效的方法?
解决方法
您需要对数据框的names
进行子集设置:
lapply(df_list,function(x) names(x)[x['e',] > 5])
#Similar to OP's attempt.
#lapply(df_list,function(x) names(x)[which(x[c("e"),] > 5)])
#$df1
#[1] "cc"
#$df2
#character(0)
#$df3
#[1] "aa" "bb"
数据
df_list <- list(df1 = structure(list(aa = c(9L,9L,2L,3L),bb = c(9L,10L,4L),cc = c(2L,6L,5L,7L)),class = "data.frame",row.names = c("a","b","c","d","e")),df2 = structure(list(aa = c(2L,1L),bb = c(4L,8L,4L,5L),cc = c(3L,3L,4L
)),"e"
)),df3 = structure(list(aa = c(1L,1L,9L),bb = c(8L,7L),3L)),"e")))
,
我们可以使用tidyverse
library(dplyr)
library(purrr)
map(df_list,~ .x %>%
rownames_to_column('rn') %>%
filter(rn == 'e') %>%
pivot_longer(cols = -rn) %>%
filter(value > 5) %>%
pull(name))
#$df1
#[1] "cc"
#$df2
#character(0)
#$df3
#[1] "aa" "bb"
数据
df_list <- list(df1 = structure(list(aa = c(9L,"e")))
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。