【发布时间】:2019-11-06 11:38:12
【问题描述】:
我有一个数据框,我想添加一列。为此,我使用 dplyr::mutate。但是,我要添加的列的值取决于其他列的值。我使用 case_when() 并解决了问题,但是如果有很多情况,代码编写起来不舒服(我在下面显示一个示例),所以我想知道是否有另一个选项(可能是循环)来简化这个。
以下代码有效:
NewTable <- Table %>%
dplyr::mutate(ColumnB = case_when(
ColumnA=="2000" ~ 0,
ColumnA=="2001" ~ 4,
ColumnA=="2002" ~ 8,
ColumnA=="2003" ~ 12,
ColumnA=="2004" ~ 16,
ColumnA=="2005" ~ 20,
ColumnA=="2006" ~ 24,
ColumnA=="2007" ~ 28,
ColumnA=="2008" ~ 32,
ColumnA=="2009" ~ 36,
ColumnA=="2010" ~ 40,
ColumnA=="2011" ~ 44))
我该如何改进它?非常感谢。
【问题讨论】:
-
可能是查找表,see here,可能重复。
-
由于没有简单、直接的函数/逻辑可以将 a 映射到 0、b 到 4、...、l 到 345,因此您必须在某处指定它们的映射。当然,您可以编写一个 lokk-up 表格,将映射包装在一个函数中,等等,但这不会减少整体代码。还是我错过了你的愿望?
-
@wusel 假设映射更简单:a 到 0,b 到 2,c 到 4,d 到 6,...我可以简化它吗?我的问题是我需要添加更多分配,并且假设要在我的代码中添加很多行。
-
这会将 2000 映射到 0,将 2001 映射到 4,等等。
4 * (as.numeric(as.character(ColumnA)) - 2000)。如果ColumnA已经是字符而不是因子,则可以省略as.character。请在您的帖子中发布可重复的输入。请参阅r 顶部的说明。 -
你在计算三个月吗?