这是我的情况: 我有一个数据帧,我想将substr函数应用于特定列的每个元素。我希望操纵包含以下表达式的列:
x = c("name1_01", "name2_02", "name3_01")
df = data.frame(x)
colnames(df) = ("Names")
df["Names"] = sapply(df["Names"], as.character)
df
# Names
# 1 name1_01
# 2 name2_01
# 3 name3_01
现在我要删除特定列中每个条目的最后3位数字。 我只是尝试了一下我不想要的东西:
df["Names"] = substr(df["Names"], 1,5)
df["Names"]
# Names
# 1 c("name1
# 2 c("name1
# 3 c("name1
如果我将substr应用于单个元素,我会得到正确的结果:
df[1,"Names"] = substr(df[1,"Names"], 1,5)
df[1,"Names"]
# Names
# [1,] "name1"
我已经尝试了很多(我也尝试过为子目录而努力),但我没有得到它。我对R很新,希望解决方案很明显......
提前感谢大家, 克里斯!
答案 0 :(得分:7)
使用mutate()
中的dplyr
:
library(dplyr)
df %>%
mutate(Names = substr(Names, 1, 5))
答案 1 :(得分:4)
尝试
substr(df[,'Names'], 1, nchar(df[,'Names'])-3)
或者
sub('...$', '', df[,'Names'])
sub('...$', '', as.character(df$Names))
#[1] "name1" "name2" "name3"