如何收集特定列
How to gather specific columns
我正在以 tidyverse 的方式处理我的数据集。但是,最后的 recode
功能不起作用。这是一个例子:
olddata <- data.frame(
x = rep(1,12),
var_a = sample(1:10, 12, replace = TRUE),
var_b = sample(1:10, 12, replace = TRUE),
var_c = sample(1:10, 12, replace = TRUE))
newdata <- olddata %>%
gather(var, type, var_a:var_c) %>%
separate(var, into = c("var", "role"), sep = -1) %>%
recode(role, "a"=1, "b"=2, "c"=3)
错误消息说
Error in UseMethod("recode") : no applicable method for 'recode' applied to an object of class "data.frame"
这里有什么问题?
recode 是一个 returns 向量的函数。如果您的目标是 tidyverse 工作流程,您可以使用 mutate 函数来获得所需的结果
newdata <- olddata %>%
gather(var, type, var_a:var_c) %>%
separate(var, into = c("var", "role"), sep = -1) %>%
mutate( role = recode(role, "a"=1, "b"=2, "c"=3))
head(newdata)
x var role type
1 1 var_ 1 3
2 1 var_ 1 5
3 1 var_ 1 2
4 1 var_ 1 4
5 1 var_ 1 10
6 1 var_ 1 7
gather
已退休。如果您使用 pivot_longer
函数,它可以在此处将 gather
和 separate
步骤组合在一起。
library(dplyr)
library(tidyr)
olddata %>%
pivot_longer(cols = -x,
names_to = c('var', 'role'),
names_pattern = '(var_)(.*)') %>%
mutate(role = recode(role, "a"=1, "b"=2, "c"=3))
# x var role value
# <dbl> <chr> <dbl> <int>
# 1 1 var_ 1 6
# 2 1 var_ 2 1
# 3 1 var_ 3 9
# 4 1 var_ 1 4
# 5 1 var_ 2 6
# 6 1 var_ 3 7
# 7 1 var_ 1 5
# 8 1 var_ 2 8
# 9 1 var_ 3 8
#10 1 var_ 1 7
# … with 26 more rows
我正在以 tidyverse 的方式处理我的数据集。但是,最后的 recode
功能不起作用。这是一个例子:
olddata <- data.frame(
x = rep(1,12),
var_a = sample(1:10, 12, replace = TRUE),
var_b = sample(1:10, 12, replace = TRUE),
var_c = sample(1:10, 12, replace = TRUE))
newdata <- olddata %>%
gather(var, type, var_a:var_c) %>%
separate(var, into = c("var", "role"), sep = -1) %>%
recode(role, "a"=1, "b"=2, "c"=3)
错误消息说
Error in UseMethod("recode") : no applicable method for 'recode' applied to an object of class "data.frame"
这里有什么问题?
recode 是一个 returns 向量的函数。如果您的目标是 tidyverse 工作流程,您可以使用 mutate 函数来获得所需的结果
newdata <- olddata %>%
gather(var, type, var_a:var_c) %>%
separate(var, into = c("var", "role"), sep = -1) %>%
mutate( role = recode(role, "a"=1, "b"=2, "c"=3))
head(newdata)
x var role type
1 1 var_ 1 3
2 1 var_ 1 5
3 1 var_ 1 2
4 1 var_ 1 4
5 1 var_ 1 10
6 1 var_ 1 7
gather
已退休。如果您使用 pivot_longer
函数,它可以在此处将 gather
和 separate
步骤组合在一起。
library(dplyr)
library(tidyr)
olddata %>%
pivot_longer(cols = -x,
names_to = c('var', 'role'),
names_pattern = '(var_)(.*)') %>%
mutate(role = recode(role, "a"=1, "b"=2, "c"=3))
# x var role value
# <dbl> <chr> <dbl> <int>
# 1 1 var_ 1 6
# 2 1 var_ 2 1
# 3 1 var_ 3 9
# 4 1 var_ 1 4
# 5 1 var_ 2 6
# 6 1 var_ 3 7
# 7 1 var_ 1 5
# 8 1 var_ 2 8
# 9 1 var_ 3 8
#10 1 var_ 1 7
# … with 26 more rows