首页 > 解决方案 > 如何在 R 中创建嵌套 for 循环以转换表中的值

问题描述

我希望对下表中的每个值进行操作,以使所有值都等于零或一。如果表中的值等于 1、2、3 或 4,我希望将其转换为等于 1。如果该值大于 4(因此介于 5 和 17 之间),那么我希望被转换为零。我认为需要一些 if else 语句,但不确定如何将它们组合在一起。谢谢!

structure(list(`1` = structure(c(1L, 5L, 15L, 12L, 11L, 12L, 
1L, 1L), .Label = c("1", "2", "3", "4", "5", "6", "7", "8", "9", 
"10", "11", "12", "13", "14", "15", "16", "17"), class = "factor"), 
    `2` = structure(c(12L, 10L, 17L, 11L, 1L, 5L, 1L, 1L), .Label = c("1", 
    "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", 
    "13", "14", "15", "16", "17"), class = "factor"), `3` = structure(c(10L, 
    12L, 1L, 10L, 6L, 1L, 14L, 1L), .Label = c("1", "2", "3", 
    "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", 
    "15", "16", "17"), class = "factor"), `4` = structure(c(1L, 
    10L, 1L, 1L, 1L, 10L, 6L, 1L), .Label = c("1", "2", "3", 
    "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", 
    "15", "16", "17"), class = "factor"), `5` = structure(c(1L, 
    1L, 1L, 10L, 11L, 1L, 1L, 1L), .Label = c("1", "2", "3", 
    "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", 
    "15", "16", "17"), class = "factor"), `6` = structure(c(1L, 
    1L, 1L, 10L, 1L, 10L, 1L, 12L), .Label = c("1", "2", "3", 
    "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", 
    "15", "16", "17"), class = "factor"), `7` = structure(c(1L, 
    1L, 14L, 10L, 10L, 1L, 1L, 1L), .Label = c("1", "2", "3", 
    "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", 
    "15", "16", "17"), class = "factor"), `8` = structure(c(1L, 
    17L, 5L, 1L, 1L, 10L, 11L, 1L), .Label = c("1", "2", "3", 
    "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", 
    "15", "16", "17"), class = "factor"), `9` = structure(c(1L, 
    10L, 1L, 1L, 12L, 1L, 1L, 10L), .Label = c("1", "2", "3", 
    "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", 
    "15", "16", "17"), class = "factor"), `10` = structure(c(10L, 
    1L, 10L, 1L, 11L, 1L, 1L, 11L), .Label = c("1", "2", "3", 
    "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", 
    "15", "16", "17"), class = "factor")), row.names = c("62", 
"94", "109", "145", "175", "227", "240", "244"), class = "data.frame")

标签: rloopsdplyr

解决方案


使用 将因子值转换为整数type.convert,与数据帧进行比较<= 4以获得逻辑(TRUE/ FALSE)值,该值可以使用+运算符转换为 1/0。

df <- type.convert(df)
df[] <- +(df <= 4)
df

#    1 2 3 4 5 6 7 8 9 10
#62  1 0 0 1 1 1 1 1 1  0
#94  0 0 0 0 1 1 1 0 0  1
#109 0 0 1 1 1 1 0 0 1  0
#145 0 0 0 1 0 0 0 1 1  1
#175 0 1 0 1 0 1 0 1 0  0
#227 0 0 1 0 1 0 1 0 1  1
#240 1 1 0 0 1 1 1 0 1  1
#244 1 1 1 1 1 0 1 1 0  0

任何小于等于 4 的都变为 1,其余变为 0。


推荐阅读