6.1.5 列合并与拆分
Base R
列值合并:paste函数;
列值拆分:strsplit函数。
widerdata <- tibble(year = c("2020", "2021", "2022"),N1 = c(100, 120, 110), N2 = c(200, 240, 260)) # 演示数据。
widerdata # 以自编数据widerdata为例。
## # A tibble: 3 × 3
## year N1 N2
## <chr> <dbl> <dbl>
## 1 2020 100 200
## 2 2021 120 240
## 3 2022 110 260
widerdata$paste <- paste(widerdata$N1, widerdata$N2, sep = ",") # 将widerdata数据集N1和N2列的数据以逗号连接为1列。
widerdata # 查看合并后的结果。
## # A tibble: 3 × 4
## year N1 N2 paste
## <chr> <dbl> <dbl> <chr>
## 1 2020 100 200 100,200
## 2 2021 120 240 120,240
## 3 2022 110 260 110,260
wider_split <- strsplit(widerdata$paste, split = ",") # 将widerdata数据集paste列拆分,返回结果为列表。
wider_split # 返回拆分的结果。
## [[1]]
## [1] "100" "200"
##
## [[2]]
## [1] "120" "240"
##
## [[3]]
## [1] "110" "260"
do.call(rbind, wider_split) # 将拆分的列表利用do.call函数按行连接。此结果返回的是矩阵或数组。
## [,1] [,2]
## [1,] "100" "200"
## [2,] "120" "240"
## [3,] "110" "260"
as.data.frame(cbind(widerdata$year, do.call(rbind, wider_split))) # 通过cbind函数返回原数据集widerdata。通过as.data.frame转变为数据框,至于里面列的类型再利用类型转换函数转为想要的类型。
## V1 V2 V3
## 1 2020 100 200
## 2 2021 120 240
## 3 2022 110 260
unlist(strsplit(widerdata$paste, split = ",")) # 通过unlist可以将结果返回为向量,向量包含了拆分后的所有单元。
## [1] "100" "200" "120" "240" "110" "260"
tidyverse
列合并
unite(data, col, ..., sep = "_", remove = TRUE, na.rm = FALSE)
参数详解:
- data:要合并的数据框。
- col:新列的列名,
- ...:要合并的列。
- sep:指定合并列时添加的分隔符。
hbdata <- widerdata %>% unite(N, N1, N2, sep = ",") # 合并widerdata数据集N1和N2列,合并用的分隔符为,,新列名为N。
hbdata # 返回合并数据集。
## # A tibble: 3 × 3
## year N paste
## <chr> <chr> <chr>
## 1 2020 100,200 100,200
## 2 2021 120,240 120,240
## 3 2022 110,260 110,260
列拆分
separate( data, col, into, sep = " ", remove = TRUE,convert = FALSE, extra = "warn", fill = "warn", ...)
参数详解:
- data:要拆分的数据框。
- col:要拆分的列。
- into:指定拆开后的新列。
- sep:指定根据什么分隔符来拆分。
- convert:指定拆分时要不要进行数据类型转换。
hbdata %>% separate(col = N, into = c("N1", "N2"), sep = ",", convert = T) # 将hbdata数据集N列拆分为N1和N2,以原N列分隔符,进行拆分,同时数据类型由字符型转为整数型。
## # A tibble: 3 × 4
## year N1 N2 paste
## <chr> <int> <int> <chr>
## 1 2020 100 200 100,200
## 2 2021 120 240 120,240
## 3 2022 110 260 110,260
参考资料
- R语言编程—基于 tidyverse,人民邮电出版社(待出版),2022.
- R语言教程,李东风,https://www.math.pku.edu.cn/teachers/lidf/docs/Rbook/html/_Rbook/index.html