R如何在一行内找到重复项

时间:2018-05-27 07:22:08

标签: r database duplicates survey

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

受访者被问及他们在哪种频率下进行了23次亲环境行为,并且他们以相对比例回答,导致得分在1(从不)和5(经常)之间。

enter image description here

我想检查每一行中的重复值,以便查看人们是否认真地随机回答(例如,某人有很多" 3"值)。

因此,我想每行检索这些副本,你知道我该怎么做吗?

谢谢:)

5 个答案:

答案 0 :(得分:3)

您可以使用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)

输出:

   id value n prop
1   1     1 3  0.3
2   1     2 1  0.1
3   1     3 1  0.1
4   1     4 1  0.1
5   1     5 4  0.4
6   2     2 2  0.2
7   2     3 4  0.4
8   2     4 3  0.3
9   2     5 1  0.1
10  3     1 1  0.1
11  3     2 1  0.1
12  3     3 4  0.4
13  3     4 3  0.3
14  3     5 1  0.1
15  4     2 5  0.5
16  4     3 2  0.2
17  4     4 1  0.1
18  4     5 2  0.2
19  5     1 4  0.4
20  5     2 1  0.1
21  5     3 1  0.1
22  5     4 1  0.1
23  5     5 3  0.3

答案 1 :(得分:1)

要查找行中的重复元素:

duplicated(x)
  

示例向量:x <- c(1, 1, 4, 5, 4, 6)

     

结果:[1] FALSE TRUE FALSE FALSE TRUE FALSE

提取重复元素:

x[duplicated(x)]
  

示例向量:x <- c(1, 1, 4, 5, 4, 6)

     

结果:[1] 1 4

有用的资料来源:

R duplicated function manual

Duplicated function examples

答案 2 :(得分:1)

我想只想计算用相同的值回答问题的频率(无论哪个问题)。这样做:

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

答案 3 :(得分:1)

似乎OP正在寻找每行sudo npm i -g npm 。一个选项可以使用maximum number of duplicate answer的{​​{1}}和apply函数作为:

选项#1:

table

选项#2:base-R

分隔的列中列出的所有行方式重复项
# 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

;

答案 4 :(得分:0)

使用DJV的样本数据,我们可以找到每一行的模式,然后计算该值的使用比率:

import { of } from 'rxjs';