我在2013年最后一次使用它后再次拿起R。我已经习惯了使用dplyr,但是我遇到了一个简单任务的问题。 我有一张看起来像
的桌子Participant Q1 Q2 Q3 Q4 Q5
1 agree neutral NA Disagree Agree
2 neutral agree NA NA NA
我的目标
Participant Q1 Q2 Q3 Q4 Q5
1 3 2 NA 1 3
2 2 1 NA NA NA
我希望能够将分类值更改为列Q1:Q5的数值,但是我看到使用dode重新编码的所有示例都适用于行而没有列。 (我可能会在示例中遗漏一些内容)。然后我希望能够选择Q1和Q2列并对其进行反向编码。
我试图在dplyr中学习如果可能的话
谢谢
答案 0 :(得分:8)
由于dplyr的recode
功能,现在相当简单。这是一种方法:
# Generate a dataframe to match yours
df <- data.frame(
participant = c(1,2),
Q1 = c("agree", "neutral"),
Q2 = c("neutral", "agree"),
Q3 = c(NA,NA),
Q4 = c("Disagree", NA),
Q5 = c("Agree", NA)
)
# Use recode to recode the data
df_recode <- df %>%
mutate(Q1 = recode(Q1, "agree" = 3, "neutral" = 2),
Q2 = recode(Q2, "neutral" = 2, "agree" = 1),
Q4 = recode(Q4, "Disagree" = 1),
Q5 = recode(Q5, "Agree" = 3)
)
您还希望了解帮助文件中的.default
和.missing
个参数,以确保在您没有&#39时引入NAs
; t表示。
答案 1 :(得分:0)
我们可以在base R
中执行此操作,而无需使用任何软件包。创建一个名为vector的查找(&#39; v1&#39;),遍历列并使用该向量更改列中的值
v1 <- setNames(c(1:3, 3), c("Disagree", "neutral", "agree", "Agree"))
df1[-1] <- lapply(df1[-1], function(x) if(any(!is.na(x))) v1[x] else NA)
df1
# Participant Q1 Q2 Q3 Q4 Q5
#1 1 3 2 NA 1 3
#2 2 2 3 NA NA NA
df1 <- structure(list(Participant = 1:2, Q1 = c("agree", "neutral"),
Q2 = c("neutral", "agree"), Q3 = c(NA, NA), Q4 = c("Disagree",
NA), Q5 = c("Agree", NA)), .Names = c("Participant", "Q1",
"Q2", "Q3", "Q4", "Q5"), class = "data.frame", row.names = c(NA, -2L))