2017-04-06 18 views
0

これはほとんどの場合非常に基本的な質問ですが、私はちょっと立ち往生しています。私はR - 列を失うことなくデータフレームを操作する

mgrno AAPL BRK MSFT WYNN 
    0001 0 0 1 1 
    0003 1 0 1 0 
    0004 0 1 0 1 

のようになります。だから私は得ることができ、結果、すなわち、私がやりたい何この

ようなデータフレーム(Bと呼ばれる)
mgrno AAPL BRK MSFT WYNN 
    0001 0 0 1 2 
    0003 1 0 3 0 
    0004 0 1 0 2 

が1で1より大きい任意の値を置き換えている必要があり私は戻って一緒に作品を置くためにMGRNO列を失うが、そこにこの

B <- as.data.frame(ifelse(B[,-1] == 0, 0, 1)) 

とのことで、これは私が

ような何かをする必要があります
temp <-B[1] 
B <- as.data.frame(ifelse(B[,-1] == 0, 0, 1)) 
B <- cbind(temp, B) 

これ以上の方法が必要です。この基本的なことを両方の人に申し訳ありません。

答えて

0

我々は、(最初​​の列を除く)データセットのサブセットに論理的な行列に変換し、+でバイナリに論理的に変換し、バックセット

df1[-1] <- +(df1[-1] > 0) 

またはより高速に割り当てることができアプローチは

df1[-1] <- lapply(df1[-1], function(x) as.integer(x > 0)) 
+1

短いと甘い - 私はすべての私のコードが短いと甘い、この単純な –

1

B[,-1]<-ifelse(B[,-1] == 0, 0, 1)となります。

+0

可能性が望むどのように - 私はすべての私のコードは、この単純なことができたいですか –

0

データフレーム/マトリックス内のすべてのセルにmax(x,1)のような関数をマップしたい場合は、ここで私が使用したトリックです。 しかし、より良い方法があると確信しています。

B = data.frame(mgrno = c("001", "002", "003"), 
      AAPL = c(0,1,0), 
      BRK = c(0,0,1), 
      MSFT = c(1,3,0), 
      WYNN = c(2,0,2)) 

out = sapply(B[2:5], function(x) lapply(x, function(z) min(z,1))) 
df = data.frame(B[,"mgrno"],out) 
df 

最初の列の名前はビットオフですが、それはより簡単な問題です。

> df 
    B....mgrno.. AAPL BRK MSFT WYNN 
1   001 0 0 1 1 
2   002 1 0 1 0 
3   003 0 1 0 1 
関連する問題