【发布时间】:2018-03-18 07:37:39
【问题描述】:
我想创建一个函数,将列中的特定值重命名为由函数指定的其他值,类似这样(尽管实际上还有更多需要重命名):
func <- function(x) x %>%
mutate(col_name = ifelse(col_name =="something","something else",
ifelse(col_name == "something2","something_else2")))
请注意,我要更改的不是列名,而是列中的值本身。但是,无论值在哪个列中,我都希望它能够工作(例如,该函数在整个数据框中工作)。此外,这仅在函数中命名的值存在时才有效,并且我希望它忽略列中不存在的值。这是一个可重现的小例子:(列值是任意的)
col1 <- c("a","b","c","d","e")
col2 <- c("b","f","d","c","g")
df <- data.frame(col1, col2)
col3 <- c("a","h","i","b","c")
col4 <- c("c","d","j","a","g")
df2 <- data.frame(col3, col4)
看起来像这样:
df1:
col1 col2
1 a b
2 b f
3 c d
4 d c
5 e g
df2:
col3 col4
1 a c
2 h d
3 i j
4 b a
5 c g
说我想这样重命名:
df1:
col1 col2
1 can chi
2 chi pig
3 equ she
4 she equ
5 fox bov
df2:
col3 col4
1 can equ
2 avi she
3 tyr asp
4 chi can
5 equ bov
所以我希望得到一个函数,它可以更改数据框列中多个值的名称,而不管其在数据框中的位置如何,并且它会忽略该函数在数据框中未找到的值。
【问题讨论】:
-
您能用所需的输出编辑问题吗?
-
我很困惑;您想重命名变量,但不更改列名?在通常的数据框中,每一列都是一个变量,所以它们是相同的。您能否在可重现的示例中添加您希望输出的内容?
-
我认为您将“变量”与列的“记录/值/条目/元素”混淆了。在 R 中,列是一个变量。如果你想引用列内的东西,你通常会称它们为“元素”或“值”。
-
感谢您的反馈,我对编程很陌生。我已经编辑了问题并更改了一些单词,并添加了我想要得到的结果。
-
@Haakonkas 很好地提供了一个可重现的例子!看看我的回答是否令人满意。顺便说一句,您的
df2好像有错字,col4的第一行应该是equ?