在 R 中的相同列中重新排列相同类型的数据值

标签 r

我的数据是这样的:

df <- structure(list(X1 = structure(c(1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 
2L), .Label = c("16S", "M"), class = "factor"), X2 = structure(c(1L, 
1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L), .Label = c("M", "T1", "T2", 
"T3", "T4"), class = "factor"), X3 = structure(c(8L, 8L, 8L, 
8L, 8L, 1L, 1L, 1L, 1L), .Label = c("R1", "R2", "R3", "R4", "T1", 
"T2", "T3", "T4"), class = "factor"), X4 = structure(c(4L, 4L, 
4L, 4L, 4L, 5L, 5L, 6L, 6L), .Label = c("R1", "R2", "R3", "R4", 
"S1", "S2", "S3"), class = "factor"), X5 = structure(c(2L, 3L, 
3L, 4L, 4L, 1L, 1L, 1L, 1L), .Label = c("16S", "S1", "S2", "S3"
), class = "factor")), row.names = 92:100, class = "data.frame")

我想将所有以 M 开头的值放在一列中,将 T 放在另一列中;值在一列中以 S 开头,在另一列中以 S 结尾,依此类推(保持行号不变)。我怎样才能在 R 中做到这一点?

预期结果:

X1 X2 X3 X4  X5
92  16S  M T4 R4  S1
93  16S  M T4 R4  S2
94  16S  M T4 R4  S2
95  16S  M T4 R4  S3
96  16S  M T4 R4  S3
97  16S  M T1 R1  S1 
98  16S  M T1 R1  S1 
99  16S  M T1 R1  S2 
100 16S  M T1 R1  S2 

最佳答案

一个选项是按行排序

df[] <- t(apply(df, 1, sort))
df
#     X1 X2 X3 X4 X5
#92  16S  M R4 S1 T4
#93  16S  M R4 S2 T4
#94  16S  M R4 S2 T4
#95  16S  M R4 S3 T4
#96  16S  M R4 S3 T4
#97  16S  M R1 S1 T1
#98  16S  M R1 S1 T1
#99  16S  M R1 S2 T1
#100 16S  M R1 S2 T1

关于在 R 中的相同列中重新排列相同类型的数据值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57980806/

相关文章:

python - 在Python中访问大量未排序的数组元素

r - 在终端中更改 R 语言设置

r - R 中的重复行,其行重复时必须改变的列

r - backports 1.1.1 包安装失败

r - 从线性混合模型 (lme4) 获取效果大小

r - 尝试使用单独的函数时未定义的列

r - R函数中有 "this"引用吗?

r - ggplot重命名facet_wrap中的facet标签

r - 使用 ggplot 构建聚类图

r - 如何更有效地使用map_dfr()对数据集进行filter()?