R如何在一行中查找重复项
我在R有一个非常大的数据集,有1797个观察值(行)和24个变量(列),对应于通过EPFL社区进行的调查 被调查者被问及他们以何种频率做出23种有利于环境的行为,他们的回答采用了相对量表,得分介于1(从不)和5(经常)之间 我想检查每行中是否有重复的值,以查看人们是否随机回答了严重的问题(例如,有很多“3”值的人) 因此,我想检索每行的这些副本,你知道我如何才能做到吗R如何在一行中查找重复项,r,database,duplicates,survey,R,Database,Duplicates,Survey,我在R有一个非常大的数据集,有1797个观察值(行)和24个变量(列),对应于通过EPFL社区进行的调查 被调查者被问及他们以何种频率做出23种有利于环境的行为,他们的回答采用了相对量表,得分介于1(从不)和5(经常)之间 我想检查每行中是否有重复的值,以查看人们是否随机回答了严重的问题(例如,有很多“3”值的人) 因此,我想检索每行的这些副本,你知道我如何才能做到吗 谢谢:)要在行中查找重复的元素: duplicated(x) 示例向量:x查找行中的重复元素: duplicated(x)
谢谢:)要在行中查找重复的元素:
duplicated(x)
示例向量:
x查找行中的重复元素:
duplicated(x)
示例向量:x我想他们只是想计算一下这些问题的回答频率是否相同(无论是哪个问题)。这就是:
library(reshape2)
data <- data.frame(ID = c(1, 2), Q1 = c(1, 4), Q2 = c(5, 2), Q3 = c(3, 2), Q4 = c(5, 2))
data
# ID Q1 Q2 Q3 Q4
# 1 1 1 5 3 5
# 2 2 4 2 2 2
melted.data <- melt(data, "ID") # , measure.vars = "")
melted.data
melted.data$count <- 1
melted.data # "variable" contains the original column name now, "value" the cell content
# ID variable value count
# 1 1 Q1 1 1
# 2 2 Q1 4 1
# 3 1 Q2 5 1
# 4 2 Q2 2 1
# 5 1 Q3 3 1
# 6 2 Q3 2 1
# 7 1 Q4 5 1
# 8 2 Q4 2 1
# group by "ID" + "value" columns and calculate the sum for the column "count"
# (I hate the "aggregate" syntax ;-)
aggregate( count ~ ID + value, data = melted.data, sum)
ID value count
# 1 1 1 1
# 2 2 2 3
# 3 1 3 1
# 4 2 4 1
# 5 1 5 2
library(重塑2)
数据我想,研究者只是想计算一下这些问题的回答频率是否相同(无论是哪一个问题)。这就是:
library(reshape2)
data <- data.frame(ID = c(1, 2), Q1 = c(1, 4), Q2 = c(5, 2), Q3 = c(3, 2), Q4 = c(5, 2))
data
# ID Q1 Q2 Q3 Q4
# 1 1 1 5 3 5
# 2 2 4 2 2 2
melted.data <- melt(data, "ID") # , measure.vars = "")
melted.data
melted.data$count <- 1
melted.data # "variable" contains the original column name now, "value" the cell content
# ID variable value count
# 1 1 Q1 1 1
# 2 2 Q1 4 1
# 3 1 Q2 5 1
# 4 2 Q2 2 1
# 5 1 Q3 3 1
# 6 2 Q3 2 1
# 7 1 Q4 5 1
# 8 2 Q4 2 1
# group by "ID" + "value" columns and calculate the sum for the column "count"
# (I hate the "aggregate" syntax ;-)
aggregate( count ~ ID + value, data = melted.data, sum)
ID value count
# 1 1 1 1
# 2 2 2 3
# 3 1 3 1
# 4 2 4 1
# 5 1 5 2
library(重塑2)
数据您可以使用tidyverse
方法
样本数据:
set.seed(123)
df <- data.frame(id = c(1:5),
q1 = sample(1:5, 5, replace = TRUE),
q2 = sample(1:5, 5, replace = TRUE),
q3 = sample(1:5, 5, replace = TRUE),
q4 = sample(1:5, 5, replace = TRUE),
q5 = sample(1:5, 5, replace = TRUE),
q6 = sample(1:5, 5, replace = TRUE),
q7 = sample(1:5, 5, replace = TRUE),
q8 = sample(1:5, 5, replace = TRUE),
q9 = sample(1:5, 5, replace = TRUE),
q10 = sample(1:5, 5, replace = TRUE))
require(tidyverse)
df %>%
gather(question, value, -id) %>%
group_by(id) %>%
#Give you the count for each answer
count(value) %>%
ungroup() %>%
#In addition, you can calculate the prop. of the same answer out of the 10 questions.
mutate(prop = n / 10)
您可以使用tidyverse
方法
样本数据:
set.seed(123)
df <- data.frame(id = c(1:5),
q1 = sample(1:5, 5, replace = TRUE),
q2 = sample(1:5, 5, replace = TRUE),
q3 = sample(1:5, 5, replace = TRUE),
q4 = sample(1:5, 5, replace = TRUE),
q5 = sample(1:5, 5, replace = TRUE),
q6 = sample(1:5, 5, replace = TRUE),
q7 = sample(1:5, 5, replace = TRUE),
q8 = sample(1:5, 5, replace = TRUE),
q9 = sample(1:5, 5, replace = TRUE),
q10 = sample(1:5, 5, replace = TRUE))
require(tidyverse)
df %>%
gather(question, value, -id) %>%
group_by(id) %>%
#Give you the count for each answer
count(value) %>%
ungroup() %>%
#In addition, you can calculate the prop. of the same answer out of the 10 questions.
mutate(prop = n / 10)
使用DJV的样本数据,我们可以找到每行的模式,然后计算该值的使用率:
modes <- as.numeric(apply(df[-1],1,function(x) names(sort(-table(x)))[1]))
ratios <- rowSums(df[-1]==modes)/(ncol(df)-1) # or df$ratios <-... to store it in a new col
# [1] 0.4 0.4 0.4 0.5 0.4
modes使用DJV的样本数据,我们可以找到每行的模式,然后计算该值的使用率:
modes <- as.numeric(apply(df[-1],1,function(x) names(sort(-table(x)))[1]))
ratios <- rowSums(df[-1]==modes)/(ncol(df)-1) # or df$ratios <-... to store it in a new col
# [1] 0.4 0.4 0.4 0.5 0.4
modes似乎OP正在寻找每行重复答案的最大数量。可以选择使用base-R
的apply
和table
功能,如下所示:
选项#1:
# row-wise apply over columns starting with 'q'
df$MaxDup <- apply(df[,startsWith(names(df),"q")], 1,
function(x)sort(table(x), decreasing = TRUE)[1])
df
# id q1 q2 q3 q4 q5 q6 q7 q8 q9 q10 MaxDup
# 1 1 2 1 5 5 5 4 5 3 1 1 4
# 2 2 4 3 3 2 4 3 5 4 3 2 4
# 3 3 3 5 4 1 4 3 4 2 3 3 4
# 4 4 5 3 3 2 5 2 4 2 2 2 5
# 5 5 5 3 1 5 4 1 1 2 1 5 4
数据:取自@DJV anser
set.seed(123)
df <- data.frame(id = c(1:5),
q1 = sample(1:5, 5, replace = TRUE),
q2 = sample(1:5, 5, replace = TRUE),
q3 = sample(1:5, 5, replace = TRUE),
q4 = sample(1:5, 5, replace = TRUE),
q5 = sample(1:5, 5, replace = TRUE),
q6 = sample(1:5, 5, replace = TRUE),
q7 = sample(1:5, 5, replace = TRUE),
q8 = sample(1:5, 5, replace = TRUE),
q9 = sample(1:5, 5, replace = TRUE),
q10 = sample(1:5, 5, replace = TRUE))
set.seed(123)
df似乎OP正在寻找每行重复答案的最大数量。可以选择使用base-R
的apply
和table
功能,如下所示:
选项#1:
# row-wise apply over columns starting with 'q'
df$MaxDup <- apply(df[,startsWith(names(df),"q")], 1,
function(x)sort(table(x), decreasing = TRUE)[1])
df
# id q1 q2 q3 q4 q5 q6 q7 q8 q9 q10 MaxDup
# 1 1 2 1 5 5 5 4 5 3 1 1 4
# 2 2 4 3 3 2 4 3 5 4 3 2 4
# 3 3 3 5 4 1 4 3 4 2 3 3 4
# 4 4 5 3 3 2 5 2 4 2 2 2 5
# 5 5 5 3 1 5 4 1 1 2 1 5 4
数据:取自@DJV anser
set.seed(123)
df <- data.frame(id = c(1:5),
q1 = sample(1:5, 5, replace = TRUE),
q2 = sample(1:5, 5, replace = TRUE),
q3 = sample(1:5, 5, replace = TRUE),
q4 = sample(1:5, 5, replace = TRUE),
q5 = sample(1:5, 5, replace = TRUE),
q6 = sample(1:5, 5, replace = TRUE),
q7 = sample(1:5, 5, replace = TRUE),
q8 = sample(1:5, 5, replace = TRUE),
q9 = sample(1:5, 5, replace = TRUE),
q10 = sample(1:5, 5, replace = TRUE))
set.seed(123)
df欢迎来到SO,请务必发布一个最小的可复制示例(R代码+数据)+示例数据的预期输出。这使我们更容易找到答案。没有人喜欢从屏幕截图中键入数据。THX:-)第一个猜测:应该首先使用restrape2
包和包内的melt
功能将数据从列转换为行……谢谢。好的,我现在将行转换为列前导,并且我想分别对每列执行复制函数(因为现在,每列对应于1797个应答者中的一个,每行对应于24个变量中的一个)。您知道如何单独执行每列的复制功能吗?lappy
在data.frame
中按列运行。您对数据集中的副本的确切定义是什么?您在23列和1797行中有五个响应值,因此您将始终有重复值(一行或一列中有多个值)?关于so“规则”的最终“元提示”:请向上投票所有有用的答案(如果您确实发现它们有用!),并通过单击(绿色)“勾选”标记最佳答案,将其作为最佳答案接受。这使得其他用户更容易在短时间内找到好的解决方案。欢迎这么做,请务必发布一个最小的可复制示例(R代码+数据)+示例数据的预期输出。这使我们更容易找到答案。没有人喜欢从屏幕截图中键入数据。THX:-)第一个猜测:应该首先使用restrape2
包和包内的melt
功能将数据从列转换为行……谢谢。好的,我现在将行转换为列前导,并且我想分别对每列执行复制函数(因为现在,每列对应于1797个应答者中的一个,每行对应于24个变量中的一个)。您知道如何单独执行每列的复制功能吗?lappy
在data.frame
中按列运行。您对数据集中的副本的确切定义是什么?您在23列和1797行中有五个响应值,因此您将始终有重复值(一行或一列中有多个值)?关于so“规则”的最终“元提示”:请向上投票所有有用的答案(如果您确实发现它们有用!),并通过单击(绿色)“勾选”标记最佳答案,将其作为最佳答案接受。这使得其他用户更容易在短时间内找到好的解决方案!!请问我可以在哪个图书馆/包裹里找到tidyverse?很高兴我能帮忙:)。Tidyverse是数量惊人的软件包,在如何分析、可视化和建模数据方面具有相同的理念和想法。您可以从cran(控制台中的install.packages(“tidyverse”)下载它,您可以在这里找到更多信息:。哦,太棒了!!请问我可以在哪个图书馆/包裹里找到tidyverse?很高兴我能帮忙:)。Tidyverse是数量惊人的软件包,在如何分析、可视化和建模数据方面具有相同的理念和想法。您可以从cran(控制台中的install.packages(“tidyverse”)下载它,您可以在此处找到更多信息:。好的,非常感谢!!我不明白上一次输出中出现的“值”是什么,你能解释一下“measure.vars”选项吗在melt函数中?这是我完成此代码后的输出:ID值count#1 4 1#2 5 1 4#3 7 1 9#4 8 1 5#6 10 1 1#6 12 1 4我总是将“1”作为一个值,这是什么意思?再次感谢:)很抱歉,通过查看所有数据,我终于明白了。这太神奇了,这正是我想要的谢谢你