【问题标题】:determining the percent of identical responses across multiple variables确定多个变量中相同响应的百分比
【发布时间】:2018-09-25 18:09:09
【问题描述】:

我有一个包含许多变量的数据集,包括 26 个变量,所有变量的值都在 1-12 之间。我想删除至少 80% 的值相同的所有行(超过 21 个 1,或超过 21 个 2 等)。我很难想出在 R 中执行此操作的方法,并且非常感谢有关如何解决此问题的一些想法!

当我运行时

out <- df1[apply(df1, 1, function(x) mean(x == Mode(x)) <= 0.8),] 

在一组变量的子集上编码,另一组变量的值都变为NA。

这里有 60 行数据集,包含来自所有三个条件的 5 个问题:https://nofile.io/f/gBWymjYmQ2O/dataset

我的预期输出是 df1(它有 100 多个变量),其中对 26 个感兴趣的变量的响应超过 80% 的行相同。

【问题讨论】:

  • 我理解你的描述。我想知道的是,在您显示的示例数据中,在删除 NA 行和大于 80% 的相同响应后,当我得到 48 行时将输出多少行
  • 我实际上不希望删除所有 NA 的行。除了 NA 之外,只有 90% 以上相同值的行。这有帮助吗?
  • 在这种情况下df1[ apply(df1, 1, function(x) mean(x == Mode(x), na.rm = TRUE) &lt;= 0.8 | all(is.na(x))),]
  • 是的,就是这样!非常感谢!

标签: r database analysis data-science


【解决方案1】:

我们可以遍历数据集的行,获取值的频率,检查最高频率值是否不超过 80% 以创建逻辑 vector 并据此删除行

Mode <- function(x) {
   ux <- unique(x)
   ux[which.max(tabulate(match(x, ux)))]
} 

out <- df1[apply(df1, 1, function(x)  mean(x == Mode(x)) <= 0.8),]

更新

根据 OP 的数据集,行中有 NA,有些行具有所有 NA。我们可以更改代码以删除那些具有所有 NA 且具有 80% 相同值的行

Mode <- function(x) {
 ux <- unique(x[!is.na(x)])
 ux[which.max(tabulate(match(x, ux)))]
 } 

df1[ apply(df1, 1, function(x)  mean(x == Mode(x), na.rm = TRUE) <= 0.8 & !all(is.na(x))),]

数据

set.seed(24)
df1 <- as.data.frame(matrix(sample(1:12, 26 *20, replace = TRUE), ncol = 26))
df1[c(1, 3, 7),1:21] <- 5

【讨论】:

  • 我在让它正常工作时遇到了一些麻烦,因为这些列是具有更多变量的更大数据集的一部分。我可以通过对感兴趣的变量进行子集化来做到这一点,添加一个 id 变量,然后通过降低百分比来调整添加的变量,然后通过匹配的 id 对原始数据集进行子集化;但我想知道是否有更好的方法。
  • @BenjiKaveladze 如果您还有其他列,请按colsneeded &lt;- 1:5; df1[apply(df1[colsneeded], 1, function(x) mean(x == Mode(x)) &lt;= 0.8),]子集您的数据集
  • 这个解决方案似乎对我不起作用。当我运行它时,没有任何具有>.9 相似性的行被删除。当我只运行 df1[apply(df1[colsneeded], 1, function(x) mean(x == Mode(x))
  • @BenjiKaveladze 数据集中有 NA 吗?如果是这样的话mean(x == Mode(x), na.rm = TRUE)
  • 在数据集来自的研究中,参与者被分为三组之一,每组回答不同的问题。似乎正在发生的事情是当我在一组变量的子集上运行 out
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-10
  • 2022-01-14
  • 2021-07-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多