首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在具有多列的r中收集数据

问在具有多列的r中收集数据
EN

Stack Overflow用户
提问于 2019-10-04 23:33:33
回答 2查看 371关注 0票数 2

我有一些数据,我试图在R中使用整洁的R和pivot longer函数来得到下面提到的输出。但是我不能这样做,我正在获取数据

我有这种格式的数据。(使用许多其他列名)

代码语言:javascript
复制
Country State   Year 1  Population 1    Year 2  Population2
U.S.A   IL  2009    20000   2010    30000
U.S.A   VA  2009    30000   2010    40000

我想以这种格式获取数据。

代码语言:javascript
复制
Country State   Year    Population
U.S.A   IL  2009    20000
U.S.A   IL  2010    30000
U.S.A   VA  2009    30000
U.S.A   VA  2010    40000

我只能做on栏目,但不能通过其他栏目,如population

我的代码如下。

代码语言:javascript
复制
file1<-file %>%
 pivot_longer(
   cols = contains("Year"),
   names_sep = "_",
  names_to = c(".value", "repeat"),

 )

我能够让它在Tidyverse上工作。

代码语言:javascript
复制
library(tidyverse)
file<-read_excel("peps300.xlsx")

names(file)<-str_replace_all(names(file), c("Year " = "Year_" , "Num " = "Num_", "DRate " = "DRate_" , "PRate " = "PRate_",  "Denom " = "Denom_"))

file<-file %>%
 pivot_longer(
   cols = c(contains("Year"),contains("Num"),contains("DRate"),contains("PRate"),contains("Denom")),
   names_sep = "_",
  names_to = c(".value", "repeat")
 )
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-10-04 23:36:45

一个选项是指定人口“starts_with”或“cols”的年份。

代码语言:javascript
复制
library(dplyr)
df1 %>% 
    pivot_longer(cols = c(starts_with("Population"), starts_with("Year")), 
    names_to = c(".value", "group"), names_pattern = "(.*)_(.*)")
# A tibble: 4 x 5
#  Country State group Population  Year
#  <chr>   <chr> <chr>      <int> <int>
#1 U.S.A   IL    1          20000  2009
#2 U.S.A   IL    2          30000  2010
#3 U.S.A   VA    1          30000  2009
#4 U.S.A   VA    2          40000  2010

数据

代码语言:javascript
复制
df1 <- structure(list(Country = c("U.S.A", "U.S.A"), State = c("IL", 
"VA"), Year_1 = c(2009L, 2009L), Population_1 = c(20000L, 30000L
), Year_2 = c(2010L, 2010L), Population_2 = c(30000L, 40000L)), 
   class = "data.frame", row.names = c(NA, 
-2L))
票数 3
EN

Stack Overflow用户

发布于 2019-10-04 23:47:05

代码语言:javascript
复制
df %>%
    pivot_longer(
        -c(Country,State),
        names_to = c(".value","group"),
        names_pattern = "(.+)_(.+)"
    )
代码语言:javascript
复制
# A tibble: 4 x 5
  Country State group Year  Population
  <chr>   <chr> <chr> <chr> <chr>     
1 U.S.A   IL    1     2009  20000     
2 U.S.A   IL    2     2010  30000     
3 U.S.A   VA    1     2009  30000     
4 U.S.A   VA    2     2010  40000 

然后,如果不需要group,则可以将其删除。

要做到这一点,您需要首先清除列名。确保它们都遵循相同的模式,并且单词之间用一个空格或一个下划线连接。

代码语言:javascript
复制
df <- structure(list(Country = c("U.S.A", "U.S.A"), State = c("IL", 
"VA"), Year_1 = c("2009", "2009"), Population_1 = c("20000", 
"30000"), Year_2 = c("2010", "2010"), Population_2 = c("30000", 
"40000")), class = c("spec_tbl_df", "tbl_df", "tbl", "data.frame"
), row.names = c(NA, -2L))
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58239446

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档