使用 dplyr 和其他人用 R 操作数据框
Manipulating data frame with R using dplyr and others
我创建了一个示例数据框来帮助说明我的问题。想象一下这个设置有很多行和列。现在看起来像这样:
> row1 <- rep(LETTERS[1:3], each=5)
> row2 <- sample(1:100, 15)
> df <- data.frame(row1,row2)
> t(df)
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [,11] [,12] [,13] [,14] [,15]
row1 "A" "A" "A" "A" "A" "B" "B" "B" "B" "B" "C" "C" "C" "C" "C"
row2 "33" "56" "44" "70" " 2" "15" "34" " 3" "24" "21" "68" "88" "27" "79" "31"
我需要让它看起来像:
> t(df2)
[,1] [,2] [,3] [,4] [,5]
row1 "A" "A" "A" "A" "A"
row2 "33" "56" "44" "70" " 2"
row3 "B" "B" "B" "B" "B"
row4 "15" "34" " 3" "24" "21"
row5 "C" "C" "C" "C" "C"
row6 "68" "88" "27" "79" "31"
本质上,有一组行数 headers 具有唯一的四个代码标识符(示例中的字母)。我尝试使用来自 dplyr 的不同 'select' 调用以及 R 原生的 'subset' 调用。
如能为我指明正确的方向,我们将不胜感激。非常感谢。
您可以使用 split
将您的数据拆分为 row1
,然后使用 cbind
将其重新绑定在一起。请注意,转置会将所有值转换为 character
。
t(do.call(cbind, split(df, df$row1)))
## 1 2 3 4 5
## A.row1 "A" "A" "A" "A" "A"
## A.row2 "26" "59" "21" "85" "74"
## B.row1 "B" "B" "B" "B" "B"
## B.row2 "78" "60" "24" "53" " 3"
## C.row1 "C" "C" "C" "C" "C"
## C.row2 "52" "34" "66" "98" "41"
我创建了一个示例数据框来帮助说明我的问题。想象一下这个设置有很多行和列。现在看起来像这样:
> row1 <- rep(LETTERS[1:3], each=5)
> row2 <- sample(1:100, 15)
> df <- data.frame(row1,row2)
> t(df)
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [,11] [,12] [,13] [,14] [,15]
row1 "A" "A" "A" "A" "A" "B" "B" "B" "B" "B" "C" "C" "C" "C" "C"
row2 "33" "56" "44" "70" " 2" "15" "34" " 3" "24" "21" "68" "88" "27" "79" "31"
我需要让它看起来像:
> t(df2)
[,1] [,2] [,3] [,4] [,5]
row1 "A" "A" "A" "A" "A"
row2 "33" "56" "44" "70" " 2"
row3 "B" "B" "B" "B" "B"
row4 "15" "34" " 3" "24" "21"
row5 "C" "C" "C" "C" "C"
row6 "68" "88" "27" "79" "31"
本质上,有一组行数 headers 具有唯一的四个代码标识符(示例中的字母)。我尝试使用来自 dplyr 的不同 'select' 调用以及 R 原生的 'subset' 调用。
如能为我指明正确的方向,我们将不胜感激。非常感谢。
您可以使用 split
将您的数据拆分为 row1
,然后使用 cbind
将其重新绑定在一起。请注意,转置会将所有值转换为 character
。
t(do.call(cbind, split(df, df$row1)))
## 1 2 3 4 5
## A.row1 "A" "A" "A" "A" "A"
## A.row2 "26" "59" "21" "85" "74"
## B.row1 "B" "B" "B" "B" "B"
## B.row2 "78" "60" "24" "53" " 3"
## C.row1 "C" "C" "C" "C" "C"
## C.row2 "52" "34" "66" "98" "41"