R 如何根据某些条件更改列的值?
我有一个名为data1的数据帧R 如何根据某些条件更改列的值?,r,if-statement,R,If Statement,我有一个名为data1的数据帧 > data1 <- data.frame(name = c("apple","apple","pine","pine", "apple","apple", "pine","pine","banana",&q
> data1 <- data.frame(name = c("apple","apple","pine","pine",
"apple","apple", "pine","pine","banana","banana"),
characters = c("red","green","yellow","brown",
"big","sweet","delicious","medium","soft", "long"))
> data1
name characters
1 apple red
2 apple green
3 pine yellow
4 pine brown
5 apple big
6 apple sweet
7 pine delicious
8 pine medium
9 banana soft
10 banana long
事实上,data1非常大。我需要将data1$name中的相同值更改为特殊值。所以我需要一个通用的方法来实现它。我尝试使用If语句来执行此操作,但存在一些错误。我该怎么做呢?就像我在对问题的评论中所说的,我没有看到列之间的关系,前缀不是按第一列的组变化吗 如果是这样,下面的代码将满足问题的要求。它使用标准的R
cumsum
技巧创建索引k
。然后粘贴由索引k
和列data1$name
索引的前缀
pref <- c("col", "color", "oth", "des")
k <- cumsum(c(1, abs(diff(data1$name == "apple")) > 0))
data2 <- data.frame(name = paste0(pref[k], data1$name),
characters = data1$characters)
data2
# name characters
#1 colapple red
#2 colapple green
#3 colapple white
#4 colorpine yellow
#5 colorpine brown
#6 colorpine black
#7 othapple big
#8 othapple sweet
#9 othapple small
#10 despine delicious
#11 despine medium
#12 despine ache
资料
data1我没有看到列之间的关系,前缀不是按第一列的组变化吗?name变量中有相同的值,例如“apple”。但是对应的字符变量值是不同的。所以我想区分它们。是的,我知道字符变量是不同的。实际输入是否更大,并且“字符”
和前缀之间始终保持相同的对应关系?是的。我需要根据data3的值更改data1$name的相同值。编辑后立即查看答案。
pref <- c("col", "color", "oth", "des")
k <- cumsum(c(1, abs(diff(data1$name == "apple")) > 0))
data2 <- data.frame(name = paste0(pref[k], data1$name),
characters = data1$characters)
data2
# name characters
#1 colapple red
#2 colapple green
#3 colapple white
#4 colorpine yellow
#5 colorpine brown
#6 colorpine black
#7 othapple big
#8 othapple sweet
#9 othapple small
#10 despine delicious
#11 despine medium
#12 despine ache
pref3 <- c(rep("col", 2), rep("color", 2), rep("oth", 2), rep("des", 2), rep("", 2))
pref3 <- setNames(pref3, data3$characters)
k <- match(data3$characters, names(pref3))
data3$name <- paste0(pref3[k], data3$name)
data1 <- data.frame(name = c("apple","apple","apple", "pine","pine","pine",
"apple","apple","apple", "pine","pine","pine"),
characters = c("red","green","white","yellow","brown","black",
"big","sweet","small","delicious","medium","ache"))
data3 <- data.frame(name = c("apple","apple","pine","pine",
"apple","apple", "pine","pine","banana","banana"),
characters = c("red","green","yellow","brown",
"big","sweet","delicious","medium","soft", "long"))