r - 我可以用 R 写什么来表示“任何值”?
问题描述
我有一个数据框“数据”,其中包含 10 个变量 A 到 J(它们都包含 0 和 1)和 500 行:
我需要根据变量 A 到 J 制作第二组 10 个变量 AY 到 JY,这样:
- 对于 AY,如果 A==1,则 AY 以 80% 的概率取值 1,如果 A==0,则 AY 以 20% 的概率取值 1
- 对于 BY,如果 B==1,则 BY 以 80% 的概率取值 1,如果 B==0,则 BY 以 20% 的概率取值 1 等等...
现在,我有变量 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,则执行第一个参数,否则执行第二个参数”?
解决方案
请在下面找到一种可行的解决方案。
- 起始数据
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)
)
- 保存原始数据
df2 <- df
- 应用一个函数,该函数根据原始数据是 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)
))
- 重命名列
colnames(df2) <- paste0(colnames(df),"Y")
- 输出
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)
推荐阅读
- ms-word - 如何将格式化文本插入word中的合并字段?
- github - 是否可以删除 GitHub 包版本,然后用新版本替换它
- ios - 在 ios 应用程序(如 facebook)中打开任意 http 页面
- python - 什么可能导致 -->TypeError: float() 参数必须是字符串或数字,而不是“方法”
- htmx - 定居在 HTMX
- kubernetes - Kubernetes pod fluentd 转发到 fluentd DaemonSet
- lint - 有人知道如何修复 StandardJS Linter 错误吗?
- c - ctypes 结构奇怪的行为?
- google-cloud-platform - 如何将每个用户的请求始终分配给实例组中的同一个实例?
- python - 将 html 代码/变量从 Flask 发送到 HTML