投射数据帧给出错误 R
Casting dataframe gives error R
这是数据框 df
,我正在尝试使用 cast
函数
在其上进行数据透视
dput(df)
structure(list(Val = c(1L, 2L, 2L, 5L, 2L, 5L), `Perm 1` = structure(c(1L,
2L, 3L, 3L, 3L, 3L), .Label = c("Blue", "green", "yellow"
), class = "factor"), `Perm 2` = structure(c(1L, 2L, 2L, 3L,
3L, 3L), .Label = c("Blue", "green", "yellow"), class = "factor"),
`Perm 3` = structure(c(1L, 2L, 2L, 2L, 3L, 3L), .Label = c("Blue",
"green", "yellow"), class = "factor")), .Names = c("Val",
"Perm 1", "Perm 2", "Perm 3"), row.names = c(NA, 6L), class = "data.frame")
并期待数据透视后的数据
Blue 1 1 1
green 2 4 9
yellow 14 12 7
我试过
cast(df, df$Val ~ df$`Perm 1`+df$`Perm 2`+df$`Perm 3`, sum, value = 'Val')
但这给出了错误
Error: Casting formula contains variables not found in molten data: df$Val, df$`Perm1`, df$`Perm2`
我怎样才能做枢轴,这样我就能得到想要的 O/P
P.S- 数据框 DF
大约有 36 列,但为简单起见,我只使用了 3 列。
任何建议将不胜感激。
谢谢
多姆尼克
您似乎想要求和,按数据集中的每个排列分组。虽然 hacky,但我认为这适用于你的问题。首先,我们创建一个函数来使用 tidyeval 语法执行求和。 Link 更多信息:Group by multiple columns in dplyr, using string vector input
sum_f <- function(col, df) {
library(tidyverse)
df <- df %>%
group_by_at(col) %>%
summarise(Val = sum(Val)) %>%
ungroup()
df[,2]
}
然后我们使用 lapply
将其应用于您的数据集,并将求和结合在一起。
bind_cols(lapply(c('Perm1', 'Perm2', 'Perm3'), sum_f, df))
这让我们得到了上述答案。
注意事项:需要知道你必须总结的列的名称才能工作。此外,每一列都需要具有相同级别的排列,即蓝色、绿色、黄色。代码将遵守此顺序。
这是数据框 df
,我正在尝试使用 cast
函数
dput(df)
structure(list(Val = c(1L, 2L, 2L, 5L, 2L, 5L), `Perm 1` = structure(c(1L,
2L, 3L, 3L, 3L, 3L), .Label = c("Blue", "green", "yellow"
), class = "factor"), `Perm 2` = structure(c(1L, 2L, 2L, 3L,
3L, 3L), .Label = c("Blue", "green", "yellow"), class = "factor"),
`Perm 3` = structure(c(1L, 2L, 2L, 2L, 3L, 3L), .Label = c("Blue",
"green", "yellow"), class = "factor")), .Names = c("Val",
"Perm 1", "Perm 2", "Perm 3"), row.names = c(NA, 6L), class = "data.frame")
并期待数据透视后的数据
Blue 1 1 1
green 2 4 9
yellow 14 12 7
我试过
cast(df, df$Val ~ df$`Perm 1`+df$`Perm 2`+df$`Perm 3`, sum, value = 'Val')
但这给出了错误
Error: Casting formula contains variables not found in molten data: df$Val, df$`Perm1`, df$`Perm2`
我怎样才能做枢轴,这样我就能得到想要的 O/P
P.S- 数据框 DF
大约有 36 列,但为简单起见,我只使用了 3 列。
任何建议将不胜感激。
谢谢
多姆尼克
您似乎想要求和,按数据集中的每个排列分组。虽然 hacky,但我认为这适用于你的问题。首先,我们创建一个函数来使用 tidyeval 语法执行求和。 Link 更多信息:Group by multiple columns in dplyr, using string vector input
sum_f <- function(col, df) {
library(tidyverse)
df <- df %>%
group_by_at(col) %>%
summarise(Val = sum(Val)) %>%
ungroup()
df[,2]
}
然后我们使用 lapply
将其应用于您的数据集,并将求和结合在一起。
bind_cols(lapply(c('Perm1', 'Perm2', 'Perm3'), sum_f, df))
这让我们得到了上述答案。 注意事项:需要知道你必须总结的列的名称才能工作。此外,每一列都需要具有相同级别的排列,即蓝色、绿色、黄色。代码将遵守此顺序。