r - 如何将某些行转换为 R 中的列?
问题描述
我有一个如下所示的数据框:
`Row Labels` Female Male
<chr> <chr> <chr>
1 London <NA> <NA>
2 42 <NA> 1
3 Paris <NA> <NA>
4 36 1 <NA>
5 Belgium <NA> <NA>
6 18 1
7 21 <NA> 1
8 Madrid <NA> <NA>
9 20 1 <NA>
10 Berlin <NA> <NA>
11 37 <NA> 1
12 23 1
13 25 1
14 44 1
我用来生成此数据框的代码如下所示:
structure(list(`Row Labels` = c("London", "42", "Paris","36", "Belgium","18" ,"21", "Madrid", "20", "Berlin", "37","23","25","44"),
Female = c(NA, NA, NA, "1", NA, NA,NA, NA, "1", NA, NA,"1","1","1"), Male = c(NA,"1", NA, NA, NA, "1", NA, NA, NA, "1",NA,NA,NA,NA)),
.Names = c("Row Labels","Female", "Male"), row.names = c(NA, -14L), class = c("tbl_df", "tbl", "data.frame"))
我想知道如何将这个数据框中的多行更改为列。
我的理想输出如下所示:
'Row Labels' Female Male 42 36 21 20 37 18 23 25 44
London 1 1
Paris 1 1
Belgium 1 1 1 1
Madrid 1 1
Berlin 3 1 1 1 1 1
解决方案
看起来很机械。调用您的数据d
:
d1 = d[seq(1, nrow(d), by = 2), ]
d2 = d[seq(2, nrow(d), by = 2), ]
d1[, c("Male", "Female")] = d2[, c("Male", "Female")]
d3 = matrix(nrow = nrow(d2), ncol = nrow(d2))
diag(d3) = 1
colnames(d3) = d2$`Row Labels`
cbind(d2, d3)
# Row Labels Female Male 42 36 21 20 37
# 1 42 <NA> 1 1 NA NA NA NA
# 2 36 1 <NA> NA 1 NA NA NA
# 3 21 <NA> 1 NA NA 1 NA NA
# 4 20 1 <NA> NA NA NA 1 NA
# 5 37 <NA> 1 NA NA NA NA 1
推荐阅读
- javascript - 如何将信息从 node.js 传递到 html
- sql - 如何使大表上的自联接更有效?
- c++ - gdb 打印内容: const set
& 变量名 - python - Selenium 浏览器不加载带有扩展名的 python
- ruby-on-rails - 如何在 Rails 日期字段下拉列表中设置开始日期和结束日期选项?
- php - 如何在电子邮件中附加一张 base64 图像?
- css - 如何尊重内部可滚动容器的高度到外部容器高度?
- reactjs - 如何更改 react-dates 输入边框颜色?
- r - 有没有办法在 R 中绘制 data.frame?
- json - JsonDecode 到列表