Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 将重复的列折叠成行_R_Dataframe_Reshape - Fatal编程技术网

R 将重复的列折叠成行

R 将重复的列折叠成行,r,dataframe,reshape,R,Dataframe,Reshape,我有一个从API中提取的数据帧。经过一些清洁后,它看起来像这样: Title Year Rating Title Year Rating Title Year Rating Movie 1 1997 6.7 Movie 2 1987 8.2 Movie 3 2009 7.1 library(dplyr) library(tidyr) data %>% gather(variable, value) %>% mutate(

我有一个从API中提取的数据帧。经过一些清洁后,它看起来像这样:

Title   Year  Rating  Title    Year  Rating  Title    Year  Rating
Movie 1 1997  6.7     Movie 2  1987  8.2     Movie 3  2009  7.1
library(dplyr)
library(tidyr)

data %>%
  gather(variable, value) %>%
  mutate(ID = rep(1:3, length.out = n() ) ) %>%
  spread(variable, value)
列标题重复,在本例中,单行包含3个单独的条目

我该如何重塑它,以3列标题、年份、评级和3行电影1、电影2、电影3结尾


最简单的方法是什么?

将input data.frame转换为列表,并根据常用列名将列拆分为组。然后取消列出每组列以在每组中生成一列,并转换回data.frame。如果DF中有多行,这也适用

给予:

  Rating  Title Year
1    6.7 Movie1 1997
2    8.2 Movie2 1987
3    7.1 Movie3 2009
注:我们假设此输入:

Lines <- "Title   Year  Rating  Title    Year  Rating  Title    Year  Rating
Movie1 1997  6.7     Movie2  1987  8.2     Movie3  2009  7.1"
DF <- read.table(text = Lines, header = TRUE, check.names = FALSE, as.is = TRUE)

将input data.frame转换为列表,并根据常用列名将列拆分为组。然后取消列出每组列以在每组中生成一列,并转换回data.frame。如果DF中有多行,这也适用

给予:

  Rating  Title Year
1    6.7 Movie1 1997
2    8.2 Movie2 1987
3    7.1 Movie3 2009
注:我们假设此输入:

Lines <- "Title   Year  Rating  Title    Year  Rating  Title    Year  Rating
Movie1 1997  6.7     Movie2  1987  8.2     Movie3  2009  7.1"
DF <- read.table(text = Lines, header = TRUE, check.names = FALSE, as.is = TRUE)

我想如果你从API中得到了数据,你的清理肯定出了什么问题。除了列顺序之外,您已经丢失了确定哪部电影的收视率和标题的所有信息

但无论如何,你可以这样做:

Title   Year  Rating  Title    Year  Rating  Title    Year  Rating
Movie 1 1997  6.7     Movie 2  1987  8.2     Movie 3  2009  7.1
library(dplyr)
library(tidyr)

data %>%
  gather(variable, value) %>%
  mutate(ID = rep(1:3, length.out = n() ) ) %>%
  spread(variable, value)

我想如果你从API中得到了数据,你的清理肯定出了什么问题。除了列顺序之外,您已经丢失了确定哪部电影的收视率和标题的所有信息

但无论如何,你可以这样做:

Title   Year  Rating  Title    Year  Rating  Title    Year  Rating
Movie 1 1997  6.7     Movie 2  1987  8.2     Movie 3  2009  7.1
library(dplyr)
library(tidyr)

data %>%
  gather(variable, value) %>%
  mutate(ID = rep(1:3, length.out = n() ) ) %>%
  spread(variable, value)
这可以通过melt from data.table完成,该表可以通过指定模式在度量中获取多个列

数据 这可以通过melt from data.table完成,该表可以通过指定模式在度量中获取多个列

数据