转换R

时间:2015-12-31 10:14:32

标签: r

我有一个数据框

Name   M0  M1 M2 M3 M4 M5  
ABC    4   4  3  4  33 22
XYZ    3   5  6  22  1 33
RTF    3   7  33 2   4  0
hdj    32  3  9  3   1  3
 .
 .
Tim    4   4   0  3  3  1

我想基于以下patern添加NA或Null值。第二行保留所有列值。但是第3行的最后一个列值为NULL或NA。第4行最后两列值

Name   M0  M1 M2 M3 M4 M5  
ABC    4   4  3  4  33 22
XYZ    3   5  6  22  1 NA
RTF    3   7  33 2  NA NA
hdj    32  3  9  NA NA  NA
.
.
tim    3   NA NA NA NA NA

这是我的尝试

    # getting the maximum rows and cols
    rows<-nrow(df)
    cols<-ncol(df)

    for (i in 3:rows) {

  df[i,cols:cols-i-1]<-NULL  

}

道歉这是多么基本。但只是其中一天!了解实现这一目标的多种方式将会很有用。个人粉丝dplyr包。

2 个答案:

答案 0 :(得分:1)

一种选择是创建一个{1}的1,其尺寸与&#39; df1&#39;中的数字列相同,将其中的下三角形元素更改为matrix,循环按行,反转elemens(NA),与数字列相乘并分配输出。当任何数字乘以NA返回NA时,这将是有用的。

rev

或者我们可以使用 m1 <- matrix(1, nrow=nrow(df1), ncol=ncol(df1)-1) m1[lower.tri(m1)] <- NA df1[-1] <- df1[-1]*apply(m1, 1, rev) df1 # Name M0 M1 M2 M3 M4 M5 #1 ABC 4 4 3 4 33 22 #2 XYZ 3 5 6 22 1 NA #3 RTF 3 7 33 2 NA NA #4 hdj 32 3 9 NA NA NA #5 zdf 42 1 NA NA NA NA #6 Tim 4 NA NA NA NA NA 中的shift函数。我们使用data.table选项在1s的向量上填充type='lead'元素,NA rbind元素,并在前面的解决方案中进行乘法运算。

list

数据

 library(data.table)
 df1[-1] <- df1[-1]*do.call(rbind,shift(rep(1, ncol(df1)-1), 
                            seq(ncol(df1)-1)-1, type='lead'))

答案 1 :(得分:0)

我不确定我是否理解,但我认为你期望这样的事情(因为df采用你的数据框):

df <- matrix(1, ncol=6, nrow=7)

ncol(df) -> ile_kolumn
ile_kolumn:3 -> ktore

if(nrow(df)-1-length(ktore)>0){
    ktore <- c(ktore, rep(ktore[length(ktore)], nrow(df)-1-length(ktore)))    
} 

for(i in 2:nrow(df)){
    df[i, ile_kolumn:ktore[i-1]] <- NA
}