首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在R中创建一个可以改变循环中变量的函数

如何在R中创建一个可以改变循环中变量的函数
EN

Stack Overflow用户
提问于 2021-09-22 14:23:44
回答 1查看 36关注 0票数 0

我正在处理一个数据集,其中包括不同人口统计变量的频率和百分比。我想创建一个循环,如果频率小于5,则可以将频率和百分比更改为NA。基本上,到目前为止,我使用的暴力方式是:

代码语言:javascript
复制
df <- df %>%
mutate(
# Suppressing N's
n_lep = ifelse(n_lep < 5, NA, n_lep),
n_eco = ifelse(n_eco < 5, NA, n_eco),
n_fem = ifelse(n_fem < 5, NA, n_fem),


# Suppressing P's
p_lep = ifelse(n_lep < 5, NA, p_lep),
p_eco = ifelse(n_eco < 5, NA, p_eco),
p_fem = ifelse(n_fem < 5, NA, p_fem)
)

有比上面的3个更多的变量,这就是为什么我想找出一种方法,如果可能的话,通过函数和/或循环来做到这一点。谢谢!

EN

回答 1

Stack Overflow用户

发布于 2021-09-22 15:08:58

下面是你如何在base中做到这一点:

代码语言:javascript
复制
data(iris)
df <- iris
names(df)
#> "Sepal.Length" "Sepal.Width"  "Petal.Length" "Petal.Width"  "Species" 

vars <- c("Sepal", "Petal")
fields <- c("Length", "Width")

for(v in vars){
  for(f in fields){
    df[,paste0(v, ".", f, "_new")] <- ifelse(df[,paste0(v, ".", f)] < 1, NA, df[,paste0(v, ".", f)])
  }
}
head(df)
#>   Sepal.Length Sepal.Width Petal.Length Petal.Width Species Sepal.Length_new
#> 1          5.1         3.5          1.4         0.2  setosa              5.1
#> 2          4.9         3.0          1.4         0.2  setosa              4.9
#> 3          4.7         3.2          1.3         0.2  setosa              4.7
#> 4          4.6         3.1          1.5         0.2  setosa              4.6
#> 5          5.0         3.6          1.4         0.2  setosa              5.0
#> 6          5.4         3.9          1.7         0.4  setosa              5.4
#>   Sepal.Width_new Petal.Length_new Petal.Width_new
#> 1             3.5              1.4              NA
#> 2             3.0              1.4              NA
#> 3             3.2              1.3              NA
#> 4             3.1              1.5              NA
#> 5             3.6              1.4              NA
#> 6             3.9              1.7              NA
Created on 2021-09-22 by the reprex package (v2.0.1)

在您的示例中,您将使用vars <- c("n", "p")fields <- c("lep", "eco", "fem"),并将每个paste0()中的.替换为_

或者作为一个函数,如果编号为1到4的列包含您想要操作的值:

代码语言:javascript
复制
sapply(df[,1:4], function(x) ifelse(x<5, "NA", x))
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69286149

复制
相关文章

相似问题

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