R 有没有更快捷的方法对调查变量进行重新分类?

R 有没有更快捷的方法对调查变量进行重新分类?,r,R,我使用的调查数据是以一种奇怪的方式编码的。调查说明,“在以下行中输入您使用的机器的代码:” 1:卡车 2:装载机 3:平板 4-9:等等 第1行: 第2行: 第7行: 我能找出如何将数据重新编码为每台机器的变量的唯一方法是使用这些大型ifelse语句 importpath <- "C:/" mydata <- read.table(paste0(importpath,"/","Machinery.csv"), header=TRUE,

我使用的调查数据是以一种奇怪的方式编码的。调查说明,“在以下行中输入您使用的机器的代码:”

1:卡车

2:装载机

3:平板

4-9:等等

第1行:

第2行:

第7行:

我能找出如何将数据重新编码为每台机器的变量的唯一方法是使用这些大型ifelse语句

importpath <- "C:/"

mydata <- read.table(paste0(importpath,"/","Machinery.csv"), header=TRUE, 
                     sep=",", row.names="ID")

mydata$Truck <- ifelse(mydata$Line1 == 1, 1, 
                ifelse(mydata$Line2 == 1, 1,
                ifelse(mydata$Line3 == 1, 1,
                ifelse(mydata$Line4 == 1, 1,
                ifelse(mydata$Line5 == 1, 1,
                ifelse(mydata$Line6 == 1, 1, 
                ifelse(mydata$Line7 == 1, 1, 
                                    0)))))))

mydata$Loader <- ifelse(mydata$Line1 == 2, 1, 
                ifelse(mydata$Line2 == 2, 1,
                ifelse(mydata$Line3 == 2, 1,
                ifelse(mydata$Line4 == 2, 1,
                ifelse(mydata$Line5 == 2, 1,
                ifelse(mydata$Line6 == 2, 1, 
                ifelse(mydata$Line7 == 2, 1, 
                                    0)))))))

mydata$FlatBed <- ifelse(mydata$Line1 == 3, 1, 
                ifelse(mydata$Line2 == 3, 1,
                ifelse(mydata$Line3 == 3, 1,
                ifelse(mydata$Line4 == 3, 1,
                ifelse(mydata$Line5 == 3, 1,
                ifelse(mydata$Line6 == 3, 1, 
                ifelse(mydata$Line7 == 3, 1, 
                                    0)))))))

importpath我真希望你能花点时间来创建一个。最好给出一个真实的数据示例,而不是让我们猜测您正在阅读的文件中有什么。但是我猜您的测试数据看起来像这样(只有三个类别)


这正是我想要的。谢谢男人。。。这并不是我想象中的数据,但由于我在过去曾获得过几次读心术的投票,我想这是我欠你的。
dd<-data.frame(Line1=c(3,1,2,0,1), 
    Line2=c(0,2,0,0,3),
    Line3=c(0,3,0,NA,1)
)
dd$Truck <- mapply(`%in%`, 1, split(dd[, paste0("Line",1:3)], 1:nrow(dd)))
dd$Loader <- mapply(`%in%`, 2, split(dd[, paste0("Line",1:3)], 1:nrow(dd)))
dd$FlatBed <- mapply(`%in%`, 3, split(dd[, paste0("Line",1:3)], 1:nrow(dd)))
dd$Truck <- apply(dd[, paste0("Line",1:3)]==1, 1, any)
dd$Loader <- apply(dd[, paste0("Line",1:3)]==2, 1, any)
dd$FlatBed <- apply(dd[, paste0("Line",1:3)]==3, 1, any)