R中有没有办法创建一个新列,根据其他列分配值? [复制]
Posted
技术标签:
【中文标题】R中有没有办法创建一个新列,根据其他列分配值? [复制]【英文标题】:Is there a way in R to create a new column, assigning values conditional on other columns? [duplicate] 【发布时间】:2021-12-11 04:52:16 【问题描述】:我有一个包含多个日期和相关数据/变量的数据框。我希望在数据框中创建一个新列,根据另一列的日期将 Yes 或 No 变量分配给新列。例如,Date1 之前的所有日期在新列中都需要一个“是”,而 Date1 之后的所有日期在新列中都需要一个“否”。我该怎么做?
【问题讨论】:
欢迎来到 SO,朱莉娅麦克唐纳!请让这个问题可重现。这包括您尝试过的示例代码(包括列出非基本 R 包,以及收到的任何错误/警告)、示例明确数据(例如,data.frame(x=...,y=...)
或来自dput(head(x))
的输出),和给定输入的预期输出。参考:***.com/q/5963269、minimal reproducible example 和 ***.com/tags/r/info。
但另一个想法是:每周有几十个问题几乎都问相同的标题/问题。请在 SO 周围搜索类似的问题。对你来说这可能是一个更好的解决方案:(1)你可以看到许多已经写好的类似问题的解决方案,而无需等待我们看到、尝试和回答;更重要的是(2)我们没有您的数据并且您没有提供任何尝试的努力或代码,因此有人猜测的机会非常低。请阅读我上面提供的链接,它们非常有帮助,可以帮助您更快地获得更好的答案。谢谢!
这能回答你的问题吗? Can dplyr package be used for conditional mutating?
【参考方案1】:
基于二进制测试添加新列的最简单方法是使用基本 R ifelse
函数。这是一个使用 mtcars 并测试 mpg >= 25 的示例,并将新列 test
和 test2
添加到数据框中。 test2
说明创建一个新的二进制列作为逻辑类型:
cars <- mtcars
cars$test <- ifelse(cars$mpg >= 25, "Yes", "No")
cars$test2 <- ifelse(cars$mpg >= 25, TRUE, FALSE)
head(cars, 5)
mpg cyl disp hp drat wt qsec vs am gear carb test test2
Mazda RX4 21.0 6 160 110 3.90 2.620 16.46 0 1 4 4 No FALSE
Mazda RX4 Wag 21.0 6 160 110 3.90 2.875 17.02 0 1 4 4 No FALSE
Datsun 710 22.8 4 108 93 3.85 2.320 18.61 1 1 4 1 No FALSE
Hornet 4 Drive 21.4 6 258 110 3.08 3.215 19.44 1 0 3 1 No FALSE
Hornet Sportabout 18.7 8 360 175 3.15 3.440 17.02 0 0 3 2 No FALSE
您可以对日期值使用逻辑比较运算符。
【讨论】:
以上是关于R中有没有办法创建一个新列,根据其他列分配值? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
根据两个 pandas DataFrames 之间的条件为新列分配值
循环以基于Python Dataframe中的其他列值创建新列[重复]