こんにちは。各列をループしたり、一度に1列ずつstr_truncのようなものを使用したりせずに、data.frame内のすべての列の文字列テキストサイズを制限する方法はありますか?たとえば、以下のデータフレームでは、一度に1列ずつ実行しなくても、すべてのテキストサイズを5文字に制限できますか。これに50列のようなものがある場合、一度に1列を切り捨てることは困難です。
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
てに変換list
できます。data.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.frame
てmatrix
使用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)
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加