【问题标题】:How do I turn these series of commands into a function?如何将这一系列命令变成一个函数?
【发布时间】:2017-03-24 15:16:14
【问题描述】:

您好,我对 R 相当陌生,并且正在尝试自学,我想将以下代码集转换为 for 循环/函数,但我在努力解决如何实现这一点,因为没有一组统一的可能条目。

这里是非函数形式的代码:

    colnames(x)[36] <- "DriveToFoodSource_BIN"
    x[,36][x[,36] == "Drive"] <- "1"
    x[,36][x[,36] == ""] <- "0"

    colnames(x)[37] <- "BusToFoodSource_BIN"
    x[,37][x[,37] == "Ride the bus"] <- "1"
    x[,37][x[,37] == ""] <- "0"

    colnames(x)[38] <- "TaxiToFoodSource_BIN"
    x[,38][x[,38] == "Taxi cab"] <- "1"
    x[,38][x[,38] == ""] <- "0"

    colnames(x)[39] <- "FriendsBringFoodSource_BIN"
    x[,39][x[,39] == "Friend"] <- "1"
    x[,39][x[,39] == ""] <- "0"

    colnames(x)[40] <- "WalkToFoodSource_BIN"
    x[,40][x[,40] == "Walk"] <- "1"
    x[,40][x[,40] == ""] <- "0"

    colnames(x)[41] <- "DeliveryFoodSource_BIN"
    x[,41][x[,41] == "Food is delivered"] <- "1"
    x[,41][x[,41] == ""] <- "0"

    colnames(x)[42] <- "OtherWayToFoodSource_BIN"
    x[,42][x[,42] == "Drive"] <- "1"
    x[,42][x[,42] == ""] <- "0"

【问题讨论】:

    标签: r function for-loop


    【解决方案1】:

    我们可以分两步完成

    1) 通过将列与复制的值的vector 进行比较以使长度相同,将列更改为二进制,然后将logical 强制为binary 并将这些值分配给感兴趣的列

    x[36:42] <- +(x[36:42]== v1[col(x[36:42])])
    

    2) 更改这些列的列名

    colnames(x)[36:42] <- v2
    

    数据

    v1 <- c("Drive", "Ride the bus", "Taxi cab", "Friend", "Walk", "Food is delivered",
        "Drive")
    v2 <- c("DriveToFoodSource_BIN", "BusToFoodSource_BIN", "TaxiToFoodSource_BIN", 
       "FriendsBringFoodSource_BIN", "WalkToFoodSource_BIN","DeliveryFoodSource_BIN",
               "OtherWayToFoodSource_BIN")
    

    【讨论】:

    • 哇,太有帮助了!非常感谢,一个快速的问题。 (x[36:42] 前面的 + 号是什么意思?
    • @EricGorski 比较== 为您提供了一个逻辑矩阵,即。 TRUE/FALSE 值,可以使用+ 强制转换为二进制1/0
    • @EricGorski 对于as.numeric 在普通 R 代码中实现的东西,这是一个丑陋的 hack。
    猜你喜欢
    • 2013-01-09
    • 1970-01-01
    • 2013-04-14
    • 2015-04-20
    • 2016-12-07
    • 2020-08-22
    • 2015-09-13
    • 2020-11-19
    • 1970-01-01
    相关资源
    最近更新 更多