我正在使用R上的枢轴表,我一直在尝试做一些事情,但我做不到。我有这样的事情:
ESM tipo_Entrega
name1 acuerdo
name1 no_acuerdo
name2 acuerdo
name2 acuerdo
name3 no_acuerdo
name3 acuerdo我需要这张桌子像这样:tb2
esm acuerdo no_acuerdo
name1 1 1
name2 2 0
name3 1 1我一直在使用dplyr,并且我这样做了:
pvt1 <- rpen %>% group_by(ESM,Tipo.Entrega) %>% summarise(Count = n())结果:在这里输入图像描述
esm tipo.entrega count
name1 acuerdo 1
name1 no_acuerdo 1
name2 acuerdo 2
name2 no_acuerdo 0
name3 acuerdo 1
name3 no_acuerdo 1我也试过这样做:
pvt1 <- rpen[ , c(9,25)]
pvt1 <- mutate(pvt1 , Acu = ifelse(tdcondes$Tipo.Entrega=="ACUERDO", "1", "0"))
pvt1 <- mutate(pvt1 , No_Acu = ifelse(tdcondes$Tipo.Entrega=="NO ACUERDO", "1", "0"))
pvt1 <- pvt1 [ , c(1,3:4)]
pvt1 <- pvt1 %>% group_by(ESM) %>% summarise(Acu = sum(Acu), No_Acu = sum(No_Acu))我得到了一个错误:
Error: Problem with `summarise()` input `Acu`.
x 'type' (character) de argumento no válido
i Input `Acu` is `sum(Acu)`.
i The error occurred in group 1: ESM = "1006 - BATALLÓN DE INFANTERÍA MECANIZADO NO 05 \"GENERAL JOSE MARIA CORDOVA".
Run `rlang::last_error()` to see where the error occurred.然后我尝试使用包pivottabler,我得到了我想要的结果,但是第一列没有名称,我需要将这个信息与另一列的信息进行比较,在第一列中没有名称,它是不可确定的.我不知道该怎么办..。救命啊!
发布于 2021-03-08 22:16:42
这个怎么样:
library(tidyr)
library(dplyr)
dat <- tibble::tribble(
~ESM, ~tipo_Entrega,
"name1", "acuerdo",
"name1", "no_acuerdo",
"name2", "acuerdo",
"name2", "acuerdo",
"name3", "no_acuerdo",
"name3", "acuerdo")
dat %>%
group_by(tipo_Entrega, ESM) %>%
summarise(n=n()) %>%
pivot_wider(names_from="tipo_Entrega", values_from="n", values_fill=0)
# # A tibble: 3 x 3
# ESM acuerdo no_acuerdo
# <chr> <int> <int>
# 1 name1 1 1
# 2 name2 2 0
# 3 name3 1 1发布于 2021-03-08 22:20:00
一个带有table + reshape的R基选项
reshape(
data.frame(table(df)),
direction = "wide",
idvar = "ESM",
timevar = "tipo_Entrega"
)给出
ESM Freq.acuerdo Freq.no_acuerdo
1 name1 1 1
2 name2 2 0
3 name3 1 1带有data.table的dcast选项
dcast(setDT(df), ESM ~ tipo_Entrega)给出
ESM acuerdo no_acuerdo
1: name1 1 1
2: name2 2 0
3: name3 1 1发布于 2021-03-08 22:30:16
您可以使用来自pivot_wider包的tidyr来完成所有这些操作:
library(tidyr)
df %>%
tidyr::pivot_wider(id_cols = ESM,
names_from = tipo_Entrega,
values_from = tipo_Entrega,
values_fn = length,
values_fill = 0)如果您不希望ESM在您的最终数据集中,您可以始终将它的输出(%>%)输送到dplyr::select(-ESM)。
输出
ESM acuerdo no_acuerdo
<chr> <int> <int>
1 name1 1 1
2 name2 2 0
3 name3 1 1数据
df <- structure(list(ESM = c("name1", "name1", "name2", "name2", "name3",
"name3"), tipo_Entrega = c("acuerdo", "no_acuerdo", "acuerdo",
"acuerdo", "no_acuerdo", "acuerdo")), class = "data.frame", row.names = c(NA,
-6L))https://stackoverflow.com/questions/66537909
复制相似问题