【问题标题】:In R, I want to create two new variables if the variable I'm checking has missing values在 R 中,如果我正在检查的变量缺少值,我想创建两个新变量
【发布时间】:2020-01-23 21:24:00
【问题描述】:
df <- data.frame(replicate(10,sample(0:100,1000,rep=TRUE)))
eee <- as.data.frame(lapply(df, function(cc) cc[ sample(c(TRUE, NA), prob = c(0.85, 0.15), size = length(cc), replace = TRUE) ]))
View(eee)

这给了我一个缺少数据的数据框。

如果我当前数据框中的变量缺少值,那么我想创建两个新变量。第一个是二进制“是”,这是丢失或“否”,它没有丢失。如果变量没有丢失,我希望第二个变量与原始变量相同。如果它丢失,我想为我的新列估算原始变量的平均值。

我不确定如何编写代码来检查我的整个数据集,而不是单独执行每个变量。

感谢您的帮助!

【问题讨论】:

标签: r loops conditional-statements


【解决方案1】:

我想出了一些粗略但有效的方法。

df <- data.frame(replicate(10,sample(0:100,1000,rep=TRUE)))

eee <- as.data.frame(lapply(df, 
  function(cc) cc[ sample(c(TRUE, NA), prob = c(0.85, 0.15), size = length(cc), replace = TRUE) ]))



replace_fn1 <- function(x) ifelse(is.na(x), "yes", "no")
pt1 <- apply(eee, c(1, 2), replace_fn1)


col_means <- as.data.frame(t(apply(eee, 2, mean, na.rm = TRUE)))

#set up df with same size of all column means

col_means <- as.data.frame(matrix(col_means, 
                          nrow = 1000, ncol = 10, byrow = TRUE))

pt2 <- pt1
na_ind <- which(is.na(eee), arr.ind = TRUE)
pt2[na_ind] <- col_means[na_ind]

【讨论】:

  • 太棒了,谢谢!
  • 是否有一种直接的方法可以使用类似的逻辑来完成第二部分?如果我想要一个变量,如果它没有丢失,它就是“原始”,如果它丢失,是该列的平均值?
  • 你看到这个最新的了吗?它是否获得有用的评级?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-11-14
  • 1970-01-01
  • 2016-10-25
  • 2018-10-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多