在R数据帧编码的下面,我想更换所有时代B
与出现b.
junk <- data.frame(x <- rep(LETTERS[1:4], 3), y <- letters[1:12])
colnames(junk) <- c("nm", "val")
Run Code Online (Sandbox Code Playgroud)
这提供:
nm val
1 A a
2 B b
3 C c
4 D d
5 A e
6 B f
7 C g
8 D h
9 A i
10 B j
11 C k
12 D l
Run Code Online (Sandbox Code Playgroud)
我最初的尝试是使用for和if语句,像这样:
for(i in junk$nm) if(i %in% "B") junk$nm <- "b"
Run Code Online (Sandbox Code Playgroud)
但我相信你可以看到,这个替换所有的值junk$nm用b.我可以看到为什么这样做但我似乎无法让它只替换原始值为的那些垃圾$ nm的情况B.
注意:我设法解决了问题 …
可能重复:
替换R数据帧中因子列的内容
我有data.frame
df1<-data.frame("Sp1"=1:6,"Sp2"=7:12,"Sp3"=13:18)
rownames(df1)=c("A","B","C","D","E","F")
df1
Sp1 Sp2 Sp3
A 1 7 13
B 2 8 14
C 3 9 15
D 4 10 16
E 5 11 17
F 6 12 18
Run Code Online (Sandbox Code Playgroud)
我想用df1 $ Sp2列中的数字8的每个条目替换为数字800.我试过:
test<-replace(df1$Sp2,df1[800,"Sp2"],5)
Run Code Online (Sandbox Code Playgroud) 我已经遇到这个职位上如何更换一批出现在所有的一列数据帧(例如,在所有列替换所有4×10) DF[DF == 4] <- 10。使用数据表可以以完全相同的方式获得相同的结果:DT[DT == 4] <- 10.
但是,如果我想应用此修改但仅应用于数据表中的特定列,我应该如何处理这些列是按位置(例如2:4)还是按名称(例如c("V2", "V3", "V4"))指定的?
我更喜欢“优雅”的解决方案,而不是对每一列进行迭代。
我以前使用mutate_all函数 indplyr来替换数据框中的值。我正在尝试更新我的代码以适应新的跨功能,但我不确定如何更新它以便它可以执行替换功能。
下面是一个示例数据集。
df$A <- c(10,0,0,0,0,0,12,12,0,14,-99,14,-99,-99,16,16)
df$B <- c(10,0,0,0,12,12,12,12,0,14,-99,14,16,16,16,16)
df$C <- c(10,12,14,16,10,12,14,16,10,12,14,16,10,12,14,16)
A B C
10 10 10
0 0 12
0 0 14
0 0 16
0 12 10
0 12 12
12 12 14
12 12 16
0 0 10
14 14 12
-99 -99 14
14 14 16
-99 16 10
-99 16 12
16 16 14
16 16 16
Run Code Online (Sandbox Code Playgroud)
我之前用来替换某个值(在本例中为 -99)的代码如下,并且成功运行。
df %>% mutate_all(funs(replace(., .== -99, "Removed")))
A B C
10 10 …Run Code Online (Sandbox Code Playgroud)