首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在循环中引用varname1、varname2等

如何在循环中引用varname1、varname2等
EN

Stack Overflow用户
提问于 2021-12-30 23:42:03
回答 4查看 59关注 0票数 1

我有一个dataframe,它有变量component1_done、component2_done等等。例如,我想将每一份表列为:

代码语言:javascript
复制
proportions(table(df$component1_done))
proportions(table(df$component2_done))
proportions(table(df$component3_done))
proportions(table(df$component4_done))
proportions(table(df$component5_done))
proportions(table(df$component6_done))

我如何使用循环来做同样的事情?换句话说,如何在循环中引用df$component"i"_done?

谢谢!

EN

回答 4

Stack Overflow用户

发布于 2021-12-30 23:52:32

为此您可以使用lapply。结果是所有列的比例列表。

代码语言:javascript
复制
df <- data.frame(a=c(1,2,2,4,5), b=c(3,4,5,6,6))

lapply(df, function(x) proportions(table(x)))
$a
x
  1   2   4   5
0.2 0.4 0.2 0.2

$b
x
  3   4   5   6
0.2 0.2 0.2 0.4

dplyr

代码语言:javascript
复制
library(dplyr)

as.list(df %>% summarise(across(everything(), ~ proportions(table(.x)))))
$a
a
  1   2   4   5
0.2 0.4 0.2 0.2

$b
b
  3   4   5   6
0.2 0.2 0.2 0.4
票数 1
EN

Stack Overflow用户

发布于 2021-12-31 03:33:34

太感谢你了安德烈!你的当然要漂亮得多,但与此同时,我也一直在努力使用循环。我们的答案是使用更长的格式。

代码语言:javascript
复制
for (i in 1:6){
  df0 <- df %>% filter(answerindex==8)
  char <- paste0("component",i,"_done")
  df0 <- df0 %>% select("username",all_of(char))
  df0_longer <-  pivot_longer(df0, col = -c(username), names_to = "component", values_to = "done")
  t <- proportions(table(df0_longer$done))
  print(t)
}

这是可行的,但我很不高兴,因为这比原来的六行长;)

票数 0
EN

Stack Overflow用户

发布于 2021-12-31 03:40:13

如果您真的想使用一个循环,您可以使用

代码语言:javascript
复制
df <- data.frame(a=c(1,2,2,4,5), b=c(3,4,5,6,6))

for (i in seq_along(names(df))){
       print(proportions(table(df[,i])))
    }

循环不打印,除非你说要。

或者,您可以将每个表分配给列表,然后打印该列表。

代码语言:javascript
复制
tables <- list()
for (i in seq_along(names(df))){
       tables[[i]] <- proportions(table(df[,i]))
    }
tables
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70537739

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档