r - 如何在 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")
解决方案
使用 将因子值转换为整数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。
推荐阅读
- python - 如何在 python 和数学中获得相同的加法运算结果?
- php - 试图调用“Symfony\Component\Form\ChoiceList\View\ChoiceListView”类的名为“getChoices”的未定义方法
- firebase - Firebase 推送通知定价
- php - 解析 UTC 日期,输出本地日期时间
- json - 将 Json 响应转换为 DataTable / List
- unity3d - AssetBundle 缓存过程。缓存 Unity 资产包时会发生什么?ab 的哪些属性使其与其缓存形式不同?
- elasticsearch - 如何在 ElasticSearch 中有效地合并 3 个不同的搜索条件?(同时使用文本、乳胶和矢量)
- python - 如何阻止聚合函数将不需要的行添加到数据框中?
- authentication - Camel Restlet 文档说以下路由“带身份验证的端点”,但找不到路由示例
- html - SyntaxError: 意外的标记 ';' 在编译 ejs 时