gpt4 book ai didi

R - 将数据框中不同字符串长度的列拆分为仅包含一个字符的多列

转载 作者:行者123 更新时间:2023-12-02 05:56:38 25 4
gpt4 key购买 nike

我有一个这样的数据框:

Name     S1     S2     S3     Symbol
n_12 2.3 6.1 0 A
n_13 3.4 3.7 0 ACM
n_14 1.3 1.0 0 BN
n_23 2.0 4.1 0 NOPXY

我希望将最后一列 Symbol 拆分为多列,每列有一个字符或什么都没有。
    Name     S1     S2     S3     Sy1     Sy2     Sy3     Sy4     Sy5
n_12 2.3 6.1 0 A
n_13 3.4 3.7 0 A C M
n_14 1.3 1.0 0 B N
n_23 2.0 4.1 0 N O P X Y

感谢您对此提供的任何帮助。

最佳答案

一种方法是使用 tidyr::separate它将包含字符串的单列拆分为包含子字符串的多列。

df
Name S1 S2 S3 Symbol
1 n_12 2.3 6.1 0 A
2 n_13 3.4 3.7 0 ACM
3 n_14 1.3 1.0 0 BN
4 n_23 2.0 4.1 0 NOPXY
sep= separate 的论据接受正则表达式或数字向量,列出要拆分的字符串中的位置。由于我们要在每个字符后进行拆分,因此我们希望给出一个从 1 到最长字符串长度的数字序列( -1 ,因为我们不需要在最后一个字符后进行拆分)。最长字符串的长度用 max(nchar(.$Symbol)) 计算.感谢 Rich Scriven用于指出 nchar是矢量化的,因此不需要用 sapply 调用.

然后我们用要分割的列的名称制作一个字符向量 Symbol进入。在您的情况下,我们可以粘贴 'Sy'到相同的数字序列得到 c('Sy1', 'Sy2' ...)
df %>%
tidyr::separate(Symbol,
sep = seq_len(max(nchar(.$Symbol)) - 1),
into = paste0('Sy', seq_len(max(nchar(.$Symbol)))))

Name S1 S2 S3 Sy1 Sy2 Sy3 Sy4 Sy5
1 n_12 2.3 6.1 0 A
2 n_13 3.4 3.7 0 A C M
3 n_14 1.3 1.0 0 B N
4 n_23 2.0 4.1 0 N O P X Y

如果您收到以下错误:
Error in nchar(.$Symbol) : 'nchar()' requires a character vector

那么很可能是 df$Symbol类型为 factor (创建或加载 data.frame 时的默认值)不是 character .

您可以提供 read.tabledata.frame与参数 stringsAsFactor=F保留 Symbol变量从被转换为 factor ,或将其转换回 character .

Tidyverse 选项(可以在调用 tidyr::separate 之前插入管道:
df <- df %>%
dplyr::mutate(Symbol = as.character(Symbol))

或以 R 为基数:
df$Symbol <- as.character(df$Symbol)

关于R - 将数据框中不同字符串长度的列拆分为仅包含一个字符的多列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52845046/

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