【问题标题】:Recoding multiple variables重新编码多个变量
【发布时间】:2013-08-05 09:15:01
【问题描述】:

我正在尝试根据现有变量重新编码创建新变量。以下代码是我想出的。有没有更好的方法来做到这一点?例如,我必须提前创建单独的矩阵还是可以轻松地在我现有的数据集中创建新变量?

rec<-c("col1", "col2", "col3", "col4")

recmat<-as.data.frame(matrix(NA,800, length(rec)))
recmat[, 1:length(rec)][0<=dat[,rec] & 1>=dat[,rec]]<-0
recmat[, 1:length(rec)][2<=dat[,rec] & dat[,rec]<=4]<-1

dat 的第一行如下所示:

     col1    col2   col3       col4
1       NA     NA     NA         NA
2       NA     NA     NA         NA
3       NA     NA     NA          1
4        0     NA     NA         NA
5        0     NA     NA         NA
6       NA     NA     NA         NA
7        0      0      0         NA

【问题讨论】:

    标签: r data-manipulation


    【解决方案1】:

    您可以像这样将矢量化函数应用于数据框:

    f=function(x) ifelse((x>=0 & x<=1),0,ifelse((x>=2 & x<=4),1,NA))
    recmat<-f(dat)
    

    或许

    recmat<-f(dat[,rec])
    

    如果您提供了一个 dat 可能是什么样子的示例,将会有所帮助。

    【讨论】:

    • 谢谢!像魅力一样工作!
    • 在函数周围写入 as.data.frame(f(dat[,rec])) 也会将变量转换为数字,因为您提供的函数出于某种原因返回带有字符输入的矩阵。跨度>
    • 这很奇怪。我用dat=matrix(runif(40)*5,ncol=4,dimnames=list(1:10,c("col1","col2","col3","col4"))) 测试(在你编辑你的帖子之前)并得到了数字输出。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-07
    • 2021-12-27
    相关资源
    最近更新 更多