首页 > 解决方案 > 我可以用 R 写什么来表示“任何值”?

问题描述

我有一个数据框“数据”,其中包含 10 个变量 A 到 J(它们都包含 0 和 1)和 500 行:

我需要根据变量 A 到 J 制作第二组 10 个变量 AY 到 JY,这样:

现在,我有变量 A 到 J 存储数据帧“数据”,并有以下作为我的代码:

out <- paste0(LETTERS[1:10], "Y")
data2 <- data.frame(data)
colnames(data2) <- out
for (i in out) {
  data2[i] <- ifelse(**???**, rbinom(length(out), 1, 0.8), rbinom(length(out), 1, 0.2))
}

我会写什么而不是问号来表示“如果变量列表中的任何值 AY:JY 等于 1,则执行第一个参数,否则执行第二个参数”?

标签: r

解决方案


请在下面找到一种可行的解决方案。

  1. 起始数据
set.seed(4854)

df <- data.frame("A" = sample(c(0,1), 500, replace = TRUE),
                 "B" = sample(c(0,1), 500, replace = TRUE),
                 "C" = sample(c(0,1), 500, replace = TRUE),
                 "D" = sample(c(0,1), 500, replace = TRUE),
                 "E" = sample(c(0,1), 500, replace = TRUE),
                 "F" = sample(c(0,1), 500, replace = TRUE),
                 "G" = sample(c(0,1), 500, replace = TRUE),
                 "H" = sample(c(0,1), 500, replace = TRUE),
                 "I" = sample(c(0,1), 500, replace = TRUE),
                 "J" = sample(c(0,1), 500, replace = TRUE)
                 )
  1. 保存原始数据
df2 <- df                
  1. 应用一个函数,该函数根据原始数据是 0 还是 1 以您指定的概率apply随机抽样(即1 或 0)replace = TRUE
df2 <- apply(df2, c(1,2), function (x)
  ifelse(
    x == 1,
    sample(c(0, 1), 1, prob = c(0.2, 0.8), replace = TRUE),
    sample(c(0, 1), 1, prob = c(0.8, 0.2), replace = TRUE)
  ))
  1. 重命名列
colnames(df2) <- paste0(colnames(df),"Y")
  1. 输出
head(df2)
#>      AY BY CY DY EY FY GY HY IY JY
#> [1,]  1  0  0  1  0  0  0  1  0  1
#> [2,]  0  1  0  0  0  0  0  0  1  1
#> [3,]  1  1  1  0  1  1  0  0  0  0
#> [4,]  1  0  1  0  1  1  1  1  1  0
#> [5,]  1  1  0  1  0  1  1  0  0  0
#> [6,]  0  0  0  1  1  1  1  1  0  1

reprex 包于 2021-09-24 创建(v2.0.1)


推荐阅读