gpt4 book ai didi

r - 我如何使用 R 在 Stata 中执行类似 foreach 的操作?

转载 作者:行者123 更新时间:2023-12-01 12:06:20 30 4
gpt4 key购买 nike

我是 R 新手,正在使用 Stata。我可以在 Stata 中使用 foreach 和 forvalue 遍历变量。

我想遍历列而不是遍历行。例如,我有名为 var1、var2、var3 的列。数据如下:

var1 var2 var3
1 1 1
2 999 3
999 2 999

我想将变量中的所有“999”值重新编码为缺失值。在Stata,我可以做到

forvalue i = 1(1)3{
replace var`i' ="NA" if var`i' =="999"
}

因此,我有这样的结果

var1 var2 var3
1 1 1
2 NA 3
NA 2 NA

另外,如果我有名为 ht、wgt、bmi 的列,我想计算列的平均值并将平均值存储在具有相应名称的新列中。数据集如下:

 ht     wgt   bmi
154.5 43.1 18.1
164.2 63 23.4

在Stata中,我可以做到

foreach i of varlist ht wgt bmi{
gen `i'mean = mean(`i')
}

结果会是

 ht    wgt   bmi  htmean wgtmean bmimean
154.5 43.1 18.1 159.35 53.05 20.75
164.2 63 23.4 159.35 53.05 20.75

我不知道如何使用 R。

最佳答案

有很多不同的方法可以做这些事情。例如。对于高度、体重、BMI 示例,您可以使用 for 循环基本上与在 Stata 中相同的方式执行此操作:

# For-loop approach
for (col in c("ht", "wgt", "bmi")) {
new_col = paste0(col, "_mean")
df2[, new_col] = mean(df2[, col])
}

不同之处在于代码中的符号和 R 中的字符串之间有更强的分隔,因此您将列名指定为字符串,使用 paste0 创建表示新列名的字符串,然后添加它们到数据框。

另一种方法是使用 dplyr 包和 mutate_at 函数,它将对多个列应用相同的转换:

library(dplyr)

df2 %>%
mutate_at(c("ht", "wgt", "bmi"),
list(mean = ~ mean(.)))

语法有点棘手:首先我们给出列名,然后下一个参数显示我们想要如何转换列。 . 是当前列的占位符,~ 表示 R 不会立即尝试计算 mean(.) 而是等到我们有要替换的实际值。当我们使用列表并为转换命名时,例如 list(transform = ~ . + 2)dplyr 会自动使用名称作为一个后缀,所以你会得到像 x_transformy_transform 等这样的列名。

关于r - 我如何使用 R 在 Stata 中执行类似 foreach 的操作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56351999/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com