Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R:压缩数据矩阵中的数据?_R - Fatal编程技术网

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