gpt4 book ai didi

r - 限制数据框中所有单元格的字符串长度?

转载 作者:行者123 更新时间:2023-12-05 01:35:49 25 4
gpt4 key购买 nike

您好,有没有一种方法可以限制 data.frame 中所有列的字符串文本大小,而不必遍历每一列并一次使用 str_trunc 之类的东西一列?例如下面的数据框,我可以将所有文本大小限制为仅 5 个字符,而不必一次一列吗?如果这有 50 列,一次截断一列将很困难。

g1 = data.frame ( 
gene = c( "aaaaaaa","aaaaaaa","aaaaaaaaaaaa","a","bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb"),
value = c("1fdfdfdsfdsfdsfds","2fdfdfdfdsfds00","fdfdfds3","5ffffffffffff","0")
)

我试过类似的东西但失败了。 lapply(g1, str_trunc, 5)

如果我可以一次性将数据框中的任何字符串限制为仅 5 个字符,那就太好了。所以例如第一个单元格,第 1 行,第 1 列将只是 aaaaa

谢谢。

最佳答案

在 OP 的代码中,str_trunc默认使用 ellipsis = "..." .如果我们将它更改为空白 ( "" ),它应该会给出与上面相同的输出。 lapply 的输出是 list ,所以我们可以将它分配回 data.frame 或用 data.frame 包装转换 listdata.frame

library(stringr)
g1[] <- lapply(g1, str_trunc, 5, ellipsis = "")
g1
# gene value
#1 aaaaa 1fdfd
#2 aaaaa 2fdfd
#3 aaaaa fdfdf
#4 a 5ffff
#5 bbbbb 0

或者我们可以使用 base R通过转换 data.framematrix并使用 substr来自 base R没有循环

g1[] <- substr(as.matrix(g1), 1, 5)
g1
# gene value
#1 aaaaa 1fdfd
#2 aaaaa 2fdfd
#3 aaaaa fdfdf
#4 a 5ffff
#5 bbbbb 0

或使用 tidyverse

library(dplyr) #1.0.0
library(stringr)
g1 %>%
mutate(across(everything(), str_sub, 1, 5))
# gene value
#1 aaaaa 1fdfd
#2 aaaaa 2fdfd
#3 aaaaa fdfdf
#4 a 5ffff
#5 bbbbb 0

如果我们有一个 dplyr版本 < 1.0.0,一个选项是mutate_all

g1 %>%
mutate_all(str_sub, 1, 5)

关于r - 限制数据框中所有单元格的字符串长度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62605096/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com