我在R中有一个非常大的数据集,其中1797个观察(行)和24个变量(列)对应于通过EPFL社区进行的调查。
受访者被问及他们在哪种频率下进行了23次亲环境行为,并且他们以相对比例回答,导致得分在1(从不)和5(经常)之间。
我想检查每一行中的重复值,以便查看人们是否认真地随机回答(例如,某人有很多" 3"值)。
因此,我想每行检索这些副本,你知道我该怎么做吗?
谢谢:)
答案 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
有用的资料来源:
答案 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';