在R中,透视重复行值到列值

  • 本文关键字:透视 r
  • 更新时间 :
  • 英文 :


我的问题类似于这一个,但我有困难使代码为我工作:透视数据框架将列标题和子标题保存在R

中我的数据是这样的:

prod1<-c(1000,2000,1400,1340)
prod2<-c(5000,5400,3400,5400)
partner<-c("World","World","Turkey","Turkey")
year<-c("2017","2018","2017","2018")
type<-c("credit","credit","debit","debit")
s<-as.data.frame(rbind(partner,year,type,prod1,prod2)

但是我需要把所有的行转换成单独的变量,所以如果我的列是:

column.names<-c("products","partner","year","type","value")

我一直在尝试下面的代码:

#fix partners
colnames(s)[seq(2, 7, 1)] <- colnames(s)[2] #seq(start,end,increment)
colnames(s)[seq(9, ncol(s), 1)] <- colnames(s)[8]
colnames(s) <-
c(s[1, 1], paste(sep = '_', colnames(s)[2:ncol(s)], as.character(unlist(s[1, 2:ncol(s)]))))
test<-s[-1,]
s <- rename(s, category=1)
test<- s %>%
slice(-1) %>%
pivot_longer(-1,
names_to = c("partner", ".value"),
names_sep = "_") %>%
arrange(partner, `Service item`) %>%
mutate(partner = as.character(partner))

但是它一直说我不能有重复的列名。有人能帮帮我吗?初始数据是以这种格式提交的,所以我需要把它变成正确的形状。

s <- rownames_to_column(s)
s %>% pivot_longer(starts_with("V")) %>% 
pivot_wider(names_from = rowname,values_from = value) %>%
select(-name) %>% pivot_longer(starts_with("prod"), names_to = "product",
values_to = "value")
# A tibble: 8 × 5
partner year  type   product value
<chr>   <chr> <chr>  <chr>   <chr>
1 World   2017  credit prod1   1000 
2 World   2017  credit prod2   5000 
3 World   2018  credit prod1   2000 
4 World   2018  credit prod2   5400 
5 Turkey  2017  debit  prod1   1400 
6 Turkey  2017  debit  prod2   3400 
7 Turkey  2018  debit  prod1   1340 
8 Turkey  2018  debit  prod2   5400 

对不起,我误解了开头的问题,这是你想要的吗?

最新更新