我有一个像这样的data.frame:
country a
country b
country c
country d
123
567
789
101
asd
dfa
dgf
fgh
我想转换成这个:
country a 123 asd
country b 567 dfa
country c 789 dgf
country d 101 fgh
Data.frame包含很多行,所以我不能按照rownames进行子集化。 t
函数转换如下:
country a countryb countryc countryd 123 567 789 101 asd dfa gf fgh
所以,t
对我来说没用。
答案 0 :(得分:1)
分割此数据框的一种方法是使用矩阵。 我假设你知道最后的列数(ncols)。
# data frame example
df = data.frame(x = c("country a","country b","country c","country d",
"123","567","789","101","asd","dfa","dgf","fgh"),stringsAsFactors = F)
# ncols: Known number of columns
ncols = 3
df = data.frame(matrix(df$x, dim(df)[1]/ncols, ncols), stringsAsFactors = F)
结果:
> df
X1 X2 X3
1 country a 123 asd
2 country b 567 dfa
3 country c 789 dgf
4 country d 101 fgh
如果使用此方法,请记住原始数据框的行数应为列数的倍数。如果没有,您将收到警告,并且将使用开头的原始df填充缺失的数据
答案 1 :(得分:-1)
一个解决方案就是这个,假设上面显示的模式是它的方式......(有人可能有比我更好的正则表达式匹配。)
as.data.frame(cbind(df$V1[grep('country \\S+', df$V1)],
as.integer(df$V1[grep('\\d+', df$V1)]),
df$V1[-grep('country \\S+|\\d+', df$V1)]))
输出如下:
V1 V2 V3
1 country a 123 asd
2 country b 567 dfa
3 country c 789 dgf
4 country d 101 fgh