1

我有一个大数据集,下面是一小部分:

    V1  V2  V3  V4  V5  V6 V7  V8 V9 V10
1:  174 174  NA  NA  NA  NA NA  NA NA  NA
2:  174  NA  NA  NA  NA  NA NA  NA NA  NA
3:  174  NA  NA  NA  NA  NA NA  NA NA  NA
4:  174  NA  NA  NA  NA  NA NA  NA NA  NA
5:  174  NA  NA  NA  NA  NA NA  NA NA  NA
6:  174  NA  NA  NA  NA  NA NA  NA NA  NA
7:  174  NA  NA 174  NA 174 NA 174 NA  NA
8:  174  NA  NA  NA  NA  NA NA  NA NA  NA
9:  174  NA  NA  NA  NA  NA NA  NA NA  NA
10: 174  NA  NA  NA  NA  NA NA  NA NA  NA

我想在有“174”的地方放置一个“1”并将其输出到一列中。我正在尝试更改格式,以便可以对我的数据进行逻辑回归。最终输出应如下所示:

1: 1
2: 1
3: 1
4: 1
5: 1
6: 1
7: 1
8: 1
9: 1
10: 1 
4

1 回答 1

2

只需使用[子集运算符。

# Create some example data
set.seed(123)
m <- matrix( c(rep(174,5),rep(NA,20)) ,nrow=5)
m[ sample(5:25,3) ] <- 174
m
#    [,1] [,2] [,3] [,4] [,5]
#[1,]  174   NA  174   NA   NA
#[2,]  174   NA  174   NA   NA
#[3,]  174   NA   NA   NA   NA
#[4,]  174   NA   NA   NA   NA
#[5,]  174   NA   NA  174   NA


# Compare values in matrix to '174' and change to '1' if condition is TRUE
m[ m == 174 ] <- 1
m
#    [,1] [,2] [,3] [,4] [,5]
#[1,]    1   NA    1   NA   NA
#[2,]    1   NA    1   NA   NA
#[3,]    1   NA   NA   NA   NA
#[4,]    1   NA   NA   NA   NA
#[5,]    1   NA   NA    1   NA

如果您只希望替换发生在第一列中,您可以使用将第一which中的值与 174 进行逻辑比较并更改为 174 的值:

m[ which( m[1:nrow(m)] == 174 ) ] <- 1
m
#    [,1] [,2] [,3] [,4] [,5]
#[1,]    1   NA  174   NA   NA
#[2,]    1   NA  174   NA   NA
#[3,]    1   NA   NA   NA   NA
#[4,]    1   NA   NA   NA   NA
#[5,]    1   NA   NA  174   NA

m[,1]
#[1] 1 1 1 1 1

在示例中,我使用矩阵并输出一个向量。您可以对 data.frames 做很多相同的事情(但要小心,在引擎盖下它们与矩阵非常不同,只要您有数字数据,这将是安全的);

df <- data.frame(m)
df[,1]
#[1] 1 1 1 1 1
于 2013-04-29T16:04:44.477 回答