我的问题简述: 为此,我将简单地使用标准的 mtcars 数据框。
head(mtcars)
mpg cyl disp hp drat wt qsec vs am gear carb
Mazda RX4 21.0 6 160 110 3.90 2.620 16.46 0 1 4 4
Mazda RX4 Wag 21.0 6 160 110 3.90 2.875 17.02 0 1 4 4
Datsun 710 22.8 4 108 93 3.85 2.320 18.61 1 1 4 1
Hornet 4 Drive 21.4 6 258 110 3.08 3.215 19.44 1 0 3 1
Hornet Sportabout 18.7 8 360 175 3.15 3.440 17.02 0 0 3 2
Valiant 18.1 6 225 105 2.76 3.460 20.22 1 0 3 1
现在我想将所有属性/列转移到行中,并将所有唯一值转移到(最多)10 个值列中。如果有 10 个以上的唯一值,则应将它们包含在另一行中。
预期的数据框如下所示:
Prop Value1 Value2 Value3 Value4 Value5 Value6 Value7 Value8 Value9 Value10
mpg 21.0 22.8 21.4 18.7 18.1 14.3 24.4 19.2 17.8 16.4
mpg 17.3 15.2 10.4 14.7 32.4 30.4 33.9 21.5 15.5 13.3
mpg 27.3 26.0 15.8 19.7 15.0 NA NA NA NA NA
cyl ...
...
非常感谢您的帮助。
最佳答案
这个方法如何使用for循环
df = matrix(ncol = 11)[-1,]
for(i in 1:ncol(mtcars)){
a = unique(mtcars[,i])
b = length(a)%%10
if(b!=0){
c = matrix(c(unique(mtcars[,i]), rep(NA,10- b)), ncol=10, byrow = T)
}
if(b==0){
c = matrix(unique(mtcars[,i]), ncol=10, byrow = T)
}
c= cbind(rep(colnames(mtcars)[i], nrow(c)),c)
df= rbind(df,c)
}
df=as.data.frame(df)
输出看起来像这样
V1 V2 V3 V4 V5 V6 V7 V8 V9 V10 V11
1 mpg 21 22.8 21.4 18.7 18.1 14.3 24.4 19.2 17.8 16.4
2 mpg 17.3 15.2 10.4 14.7 32.4 30.4 33.9 21.5 15.5 13.3
3 mpg 27.3 26 15.8 19.7 15 <NA> <NA> <NA> <NA> <NA>
4 cyl 6 4 8 <NA> <NA> <NA> <NA> <NA> <NA> <NA>
5 disp 160 108 258 360 225 146.7 140.8 167.6 275.8 472
6 disp 460 440 78.7 75.7 71.1 120.1 318 304 350 400
7 disp 79 120.3 95.1 351 145 301 121 <NA> <NA> <NA>
8 hp 110 93 175 105 245 62 95 123 180 205
9 hp 215 230 66 52 65 97 150 91 113 264
10 hp 335 109 <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA>
11 drat 3.9 3.85 3.08 3.15 2.76 3.21 3.69 3.92 3.07 2.93
12 drat 3 3.23 4.08 4.93 4.22 3.7 3.73 4.43 3.77 3.62
13 drat 3.54 4.11 <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA>
14 wt 2.62 2.875 2.32 3.215 3.44 3.46 3.57 3.19 3.15 4.07
15 wt 3.73 3.78 5.25 5.424 5.345 2.2 1.615 1.835 2.465 3.52
16 wt 3.435 3.84 3.845 1.935 2.14 1.513 3.17 2.77 2.78 <NA>
17 qsec 16.46 17.02 18.61 19.44 20.22 15.84 20 22.9 18.3 18.9
18 qsec 17.4 17.6 18 17.98 17.82 17.42 19.47 18.52 19.9 20.01
19 qsec 16.87 17.3 15.41 17.05 16.7 16.9 14.5 15.5 14.6 18.6
20 vs 0 1 <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA>
21 am 1 0 <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA>
22 gear 4 3 5 <NA> <NA> <NA> <NA> <NA> <NA> <NA>
23 carb 4 1 2 3 6 8 <NA> <NA> <NA> <NA>
关于r - 将每列的唯一值传输到行中 - 每行最多 10 个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67616458/