R:压缩数据矩阵中的数据?
以下是我的数据:R:压缩数据矩阵中的数据?,r,R,以下是我的数据: class1 class2 class3 class4 class5 class6 1 <NA> PATH PATH PATH PATH <NA> 2 PATH PATH VUS <NA> <NA> <NA> 3 VUS VUS VUS <NA> <NA> <NA> 4 PATH
class1 class2 class3 class4 class5 class6
1 <NA> PATH PATH PATH PATH <NA>
2 PATH PATH VUS <NA> <NA> <NA>
3 VUS VUS VUS <NA> <NA> <NA>
4 PATH PATH VUS <NA> <NA> VUS
5 <NA> PATH PATH <NA> <NA> <NA>
6 PATH VUS VUS <NA> VUS <NA>
7 MPATH VUS VUS PATH <NA> <NA>
8 PATH VUS VUS <NA> <NA> <NA>
9 VUS VUS VUS <NA> <NA> <NA>
10 PATH <NA> VUS <NA> <NA> <NA>
11 VUS <NA> <NA> VUS <NA> <NA>
12 VUS VUS <NA> VUS <NA> <NA>
13 PATH PATH <NA> PATH <NA> <NA>
14 PATH PATH <NA> PATH <NA> <NA>
15 VUS VUS <NA> VUS <NA> VUS
16 VUS VUS <NA> VUS <NA> VUS
17 PATH <NA> <NA> PATH <NA> <NA>
18 PATH <NA> <NA> PATH <NA> <NA>
19 PATH PATH <NA> PATH <NA> <NA>
20 PATH PATH <NA> PATH <NA> <NA>
class1 class2 class3 class4 class5 class6
1路径
2路径VUS
3个VUS VUS VUS
4路径VUS VUS
5路径
6路VUS VUS VUS
7 MPATH VUS VUS路径
8路VUS VUS
9 VUS VUS VUS VUS
10路VUS
11 VUS VUS
12 VUS VUS VUS VUS
13路
14路
15 VUS VUS VUS VUS VUS
16 VUS VUS VUS VUS VUS
17径
18径
19路
20路
这个数据矩阵包含6列,从class1到class6,每行包含PATH,VUS,…,在class1到class6的列中有“NA”的一些行,我希望前几个COL应该是“非NA”值,例如:第1行:class2和class3中的PATH将移动到class1和class2。
输出应如下所示:
class1 class2 class3 class4 class5 class6
1 PATH PATH PATH PATH <NA> <NA>
2 PATH PATH VUS <NA> <NA> <NA>
3 VUS VUS VUS <NA> <NA> <NA>
4 PATH PATH VUS VUS <NA> <NA>
5 PATH PATH <NA> <NA> <NA> <NA>
6 PATH VUS VUS VUS <NA> <NA>
7 MPATH VUS VUS PATH <NA> <NA>
8 PATH VUS VUS <NA> <NA> <NA>
9 VUS VUS VUS <NA> <NA> <NA>
10 PATH VUS <NA> <NA> <NA> <NA>
11 VUS VUS <NA> <NA> <NA> <NA>
12 VUS VUS VUS <NA> <NA> <NA>
13 PATH PATH PATH <NA> <NA> <NA>
14 PATH PATH PATH <NA> <NA> <NA>
15 VUS VUS VUS VUS <NA> <NA>
16 VUS VUS VUS VUS <NA> <NA>
17 PATH PATH <NA> <NA> <NA> <NA>
18 PATH PATH <NA> <NA> <NA> <NA>
19 PATH PATH PATH <NA> <NA> <NA>
20 PATH PATH PATH <NA> <NA> <NA>
class1 class2 class3 class4 class5 class6
1路径
2路径VUS
3个VUS VUS VUS
4路径VUS VUS
5路径
6路VUS VUS VUS
7 MPATH VUS VUS路径
8路VUS VUS
9 VUS VUS VUS VUS
10路VUS
11 VUS VUS
12 VUS VUS VUS VUS
13路
14路
15 VUS VUS VUS VUS VUS
16 VUS VUS VUS VUS VUS
17径
18径
19路
20路
我不完全清楚您想做什么,因此有两种选择
选项1:如果要将NA
s移动到行的末尾,则仅当它们出现在列1中时。以非NA
开头的行将保持不变,即使在其他位置有NA
s。
我们可以做到以下几点:
# Function to circular shift entries to the left
lshift <- function(x) {
c(tail(x, -1), head(x, 1))
}
as.data.frame(t(apply(df, 1, function(x) {
while (x[1] == "<NA>") x <- lshift(x); x;
})))
# V1 V2 V3 V4 V5 V6
#1 PATH PATH PATH PATH <NA> <NA>
#2 PATH PATH VUS <NA> <NA> <NA>
#3 VUS VUS VUS <NA> <NA> <NA>
#4 PATH PATH VUS <NA> <NA> VUS
#5 PATH PATH <NA> <NA> <NA> <NA>
#6 PATH VUS VUS <NA> VUS <NA>
#7 MPATH VUS VUS PATH <NA> <NA>
#8 PATH VUS VUS <NA> <NA> <NA>
#9 VUS VUS VUS <NA> <NA> <NA>
#10 PATH <NA> VUS <NA> <NA> <NA>
#11 VUS <NA> <NA> VUS <NA> <NA>
#12 VUS VUS <NA> VUS <NA> <NA>
#13 PATH PATH <NA> PATH <NA> <NA>
#14 PATH PATH <NA> PATH <NA> <NA>
#15 VUS VUS <NA> VUS <NA> VUS
#16 VUS VUS <NA> VUS <NA> VUS
#17 PATH <NA> <NA> PATH <NA> <NA>
#18 PATH <NA> <NA> PATH <NA> <NA>
#19 PATH PATH <NA> PATH <NA> <NA>
#20 PATH PATH <NA> PATH <NA> <NA>
样本数据
df使用apply
和order
和na.last=TRUE的选项:
t(apply(m, 1, function(x)x[order(x, na.last = TRUE)]))
或需要维护列顺序,然后:
t(apply(m, 1, function(x){
ret <- x[!is.na(x)]
length(ret) <- length(x)
ret
})
# [,1] [,2] [,3] [,4] [,5] [,6]
# 1 "PATH" "PATH" "PATH" "PATH" NA NA
# 2 "PATH" "PATH" "VUS" NA NA NA
# 3 "VUS" "VUS" "VUS" NA NA NA
# 4 "PATH" "PATH" "VUS" "VUS" NA NA
# 5 "PATH" "PATH" NA NA NA NA
# 6 "PATH" "VUS" "VUS" "VUS" NA NA
# 7 "MPATH" "VUS" "VUS" "PATH" NA NA
# 8 "PATH" "VUS" "VUS" NA NA NA
# 9 "VUS" "VUS" "VUS" NA NA NA
# 10 "PATH" "VUS" NA NA NA NA
# 11 "VUS" "VUS" NA NA NA NA
# 12 "VUS" "VUS" "VUS" NA NA NA
# 13 "PATH" "PATH" "PATH" NA NA NA
# 14 "PATH" "PATH" "PATH" NA NA NA
# 15 "VUS" "VUS" "VUS" "VUS" NA NA
# 16 "VUS" "VUS" "VUS" "VUS" NA NA
# 17 "PATH" "PATH" NA NA NA NA
# 18 "PATH" "PATH" NA NA NA NA
# 19 "PATH" "PATH" "PATH" NA NA NA
# 20 "PATH" "PATH" "PATH" NA NA NA
t(应用(m,1,函数(x){
ret我不理解您的预期输出。第1行在示例数据和预期输出中是相同的。唯一似乎已更改的是行的顺序。您在问什么?抱歉,我刚刚更新了输入和输出数据。谢谢。
t(apply(m, 1, function(x)x[order(x, na.last = TRUE)]))
t(apply(m, 1, function(x){
ret <- x[!is.na(x)]
length(ret) <- length(x)
ret
})
# [,1] [,2] [,3] [,4] [,5] [,6]
# 1 "PATH" "PATH" "PATH" "PATH" NA NA
# 2 "PATH" "PATH" "VUS" NA NA NA
# 3 "VUS" "VUS" "VUS" NA NA NA
# 4 "PATH" "PATH" "VUS" "VUS" NA NA
# 5 "PATH" "PATH" NA NA NA NA
# 6 "PATH" "VUS" "VUS" "VUS" NA NA
# 7 "MPATH" "VUS" "VUS" "PATH" NA NA
# 8 "PATH" "VUS" "VUS" NA NA NA
# 9 "VUS" "VUS" "VUS" NA NA NA
# 10 "PATH" "VUS" NA NA NA NA
# 11 "VUS" "VUS" NA NA NA NA
# 12 "VUS" "VUS" "VUS" NA NA NA
# 13 "PATH" "PATH" "PATH" NA NA NA
# 14 "PATH" "PATH" "PATH" NA NA NA
# 15 "VUS" "VUS" "VUS" "VUS" NA NA
# 16 "VUS" "VUS" "VUS" "VUS" NA NA
# 17 "PATH" "PATH" NA NA NA NA
# 18 "PATH" "PATH" NA NA NA NA
# 19 "PATH" "PATH" "PATH" NA NA NA
# 20 "PATH" "PATH" "PATH" NA NA NA