R:将substr应用于dataframe列的每个元素

Chr*_*hee 2 r

这是我的情况:我有一个数据帧,我想将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
Run Code Online (Sandbox Code Playgroud)

现在我想要删除特定列中每个条目的最后3位数字.我只是尝试了substr,这不是我想要的东西:

df["Names"] = substr(df["Names"], 1,5)
df["Names"]
# Names
# 1 c("name1
# 2 c("name1
# 3 c("name1
Run Code Online (Sandbox Code Playgroud)

但是,如果我将substr应用于单个元素,我会得到正确的结果:

df[1,"Names"] = substr(df[1,"Names"], 1,5)
df[1,"Names"]
# Names
# [1,] "name1"
Run Code Online (Sandbox Code Playgroud)

我已经尝试过很多东西(我也尝试过为子目录而烦恼)但是我没有得到它.我对R很新,希望解决方案很明显......

谢谢你们所有人,克里斯!

Ste*_*pré 8

使用mutate()来自dplyr:

library(dplyr)
df %>%
  mutate(Names = substr(Names, 1, 5))
Run Code Online (Sandbox Code Playgroud)


akr*_*run 5

尝试

substr(df[,'Names'], 1, nchar(df[,'Names'])-3)
Run Code Online (Sandbox Code Playgroud)

或者

sub('...$', '', df[,'Names'])

sub('...$', '', as.character(df$Names))
#[1] "name1" "name2" "name3"
Run Code Online (Sandbox Code Playgroud)