Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R如何在一行中查找重复项_R_Database_Duplicates_Survey - Fatal编程技术网

R如何在一行中查找重复项

R如何在一行中查找重复项,r,database,duplicates,survey,R,Database,Duplicates,Survey,我在R有一个非常大的数据集,有1797个观察值(行)和24个变量(列),对应于通过EPFL社区进行的调查 被调查者被问及他们以何种频率做出23种有利于环境的行为,他们的回答采用了相对量表,得分介于1(从不)和5(经常)之间 我想检查每行中是否有重复的值,以查看人们是否随机回答了严重的问题(例如,有很多“3”值的人) 因此,我想检索每行的这些副本,你知道我如何才能做到吗 谢谢:)要在行中查找重复的元素: duplicated(x) 示例向量:x查找行中的重复元素: duplicated(x)

我在R有一个非常大的数据集,有1797个观察值(行)和24个变量(列),对应于通过EPFL社区进行的调查

被调查者被问及他们以何种频率做出23种有利于环境的行为,他们的回答采用了相对量表,得分介于1(从不)和5(经常)之间

我想检查每行中是否有重复的值,以查看人们是否随机回答了严重的问题(例如,有很多“3”值的人)

因此,我想检索每行的这些副本,你知道我如何才能做到吗


谢谢:)

要在行中查找重复的元素:

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”作为一个值,这是什么意思?再次感谢:)很抱歉,通过查看所有数据,我终于明白了。这太神奇了,这正是我想要的谢谢你