我在R中苦苦挣扎,希望有人能帮助我。我正在尝试编写一个for循环来遍历数据帧的列,但是不幸的是,我没有成功。
这是我的问题: 我有10个数据帧(dt1,dt2,dt3,…,dt10)。例如,dt1看起来像这样:
dt1<-data.frame(Topic1=c(1,2,3,4,5,6,7,8,9),Topic2=c(9,8,7,6,5,4,3,2,1), Topic3=c(1,9,2,8,3,7,4,6,5), Name=c("A","A","A","A","A","B","B","B","B"))
当我过滤主题1(然后是主题2,主题3…)以大于5进行过滤时,我想检查Name变量是否仍然包含“ A”和“ B”。目前,我执行以下操作>
Library(dpylr)
dt.new<-dt1 %>% filter(Topic1>5)
isTRUE("A" %in% dt.new$Name && "B" %in% dt.new$Name)
最后,对于每个数据框,我想要一个新表(数据框),如下所示:
result<-data.frame(Topic=c("Topic1","Topic2","Topic3"),Return=c("FALSE","FALSE","TRUE"))
现在的问题是,我有几个数据帧(dt1,dt2…),每个数据帧都有50多个变量(Topic1,…,Topic50)。
到目前为止,我已经编写了一些循环并进行了尝试。但不幸的是没有成功。因此,我很高兴收到任何提示或提示。
非常感谢您!
答案 0 :(得分:1)
一种选择是通过检查是否有大于5的summarise
值,然后按any
对具有以'Topic'开头的列名的变量进行分组。 {1}}(不赞成使用-在较新的gather
中使用tidyr
)通过检查是否按“主题”列(pivot_longer
分组)从“宽”转换为“长” summarise
'val'元素为TRUE
all
或者先将其整形为'long'格式,然后进行library(dplyr)
library(tidyr)
dt1 %>%
group_by(Name) %>%
summarise_at(vars(starts_with('Topic')), ~ any(. > 5)) %>%
gather(Topic, val, -Name) %>%
group_by(Topic) %>%
summarise(Return = all(val))
# A tibble: 3 x 2
# Topic Return
# <chr> <lgl>
#1 Topic1 FALSE
#2 Topic2 FALSE
#3 Topic3 TRUE
化
summarise