2016-07-25 103 views
-1

我的数据框的子集转换正数值为因子R

> IntensityIndex 
    Individual X1980LLTper X1981LLTper X1982LLTper 
     1  4789.337905 15..099139 
    1201  32.470518 0.000000 27.880136 
    2231   0.000000 0.000000 0.000000 
    3331  20.200198 964.691700 4.367191 
    8545  40.367227 11.844057 2.227061 
    10031  10.425561 68.817743 29.815259 
    13543  65.883538 364.601077 16.630508 
    15843   7.161902 0.000000 1909.549849 
    23349  18704.452730 0.000000 0.000000 
    24901   3.347454 0.000000 72.299520 
    25901  822.430973 414.693913 3265.319947 
    50439  15.058856 11.638729 0.000000 

我需要的所有值> 0转换为1.数值变量所以我想实现:

Individual X1980LLTper X1981LLTper X1982LLTper 
     1  1   1   1 
    1201  1  0.000000   1 
    2231 0.000000 0.000000 0.000000 
    etc. 

然后,我会在进一步分析中将这些作为虚拟变量与factor()函数一起使用。

请记住,这个数据作为一个更大的数据集,从1980年至2012例如部分存在:

$X1980LLTper, $X1981LLTper, ... $X2012LLTper 

以及一系列单个变量(收入,年龄,性别等)

如果任何解决方案包含一个简洁的代码,我可以将生成的虚拟变量的矩阵附加到我的较大数据集,我将不胜感激。

+0

@Sotos的建议下,我得到这个: “在'[<错误 - data.frame'(。 '* tmp *',IntensityIndex [,-1]> 0,value = 1): 不支持的替换矩阵索引' – Recon93

+0

您也可以尝试'IntensityIndex [, - 1] < - ifelse(IntensityIndex [, - 1]> 0,1,0)' – Marcel10

+0

@MarcelG感谢队友,做到了! :)干杯 – Recon93

回答

0

我已经在评论中回答了问题,但您能接受此答案,以便其他人知道有答案吗?此Meta post中的一些人建议您在评论中发布您的解决方案作为答案。

你可以这样做: IntensityIndex[,-1] <- ifelse(IntensityIndex[,-1] > 0, 1, 0)

或者你可以使用@Sotos IntensityIndex[,-1][IntensityIndex[,-1] > 0] <- 1

+0

您可以将'df1'更改为实际的'IntensityIndex'名称如果您希望 – Sotos

+0

@Sotos达成一致,则会使答案更加一致。 – Marcel10