从文本和序列编号中创建一个带有Rownames paste0的新数据框

发布于 2025-01-30 11:23:03 字数 452 浏览 1 评论 0原文

hej,

这可能以前已经对此进行了审查,加上我的R技能正在变得生锈,但我正在尝试生成一个新的数据框架,其中将从两个列数据框架中从字符串和效果 /序列编号中生成Rownames。

为了更有意义,我的数据框看起来像:

IND Effect
A 3
B 2
C 4

read.table(text = "IND Effect
A 3
B 2
C 4", h = T)

我想要

IND
A_1
A_2
A_3
B_1
B_2
C_1
C_2
C_3
C_4

在新的数据框架上类似的东西。我尝试了:

new = mapply(function(x, y) paste0(rep(x, y), collapse = "_"), IND , Effect)

但是不按照我的意愿工作。

Hej,

This might have been reviewed before, plus my R skills are getting rusty, but I am trying to generate a new dataframe, where rownames will be generated from strings and effectif / sequence number from a two columns data frame.

To make more sense I have a dataframe looking like :

IND Effect
A 3
B 2
C 4

read.table(text = "IND Effect
A 3
B 2
C 4", h = T)

And I want something like

IND
A_1
A_2
A_3
B_1
B_2
C_1
C_2
C_3
C_4

on a new data frame. I tryed :

new = mapply(function(x, y) paste0(rep(x, y), collapse = "_"), IND , Effect)

but doesn't work as I would like....

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

远山浅 2025-02-06 11:23:03

您可以在seq_len()函数的帮助下:

df <- data.frame(ind = c("A", "B", "C"), 
                 effect = c(3, 2, 4))

paste(rep(df$ind, df$effect),
      unlist(sapply(df$effect, seq_len)), 
      sep = "_")
[1] "A_1" "A_2" "A_3" "B_1" "B_2" "C_1" "C_2" "C_3" "C_4"

You may nee the help of the seq_len() function:

df <- data.frame(ind = c("A", "B", "C"), 
                 effect = c(3, 2, 4))

paste(rep(df$ind, df$effect),
      unlist(sapply(df$effect, seq_len)), 
      sep = "_")
[1] "A_1" "A_2" "A_3" "B_1" "B_2" "C_1" "C_2" "C_3" "C_4"
遥远的绿洲 2025-02-06 11:23:03

使用mapply

m <- mapply(paste, df$ind, sapply(df$effect, seq), sep = "_")

输出

unlist(m)
#   A1    A2    A3    B1    B2    C1    C2    C3    C4 
#"A_1" "A_2" "A_3" "B_1" "B_2" "C_1" "C_2" "C_3" "C_4"

#or, as a data.frame object:
data.frame(new = unname(unlist(m)))
#  new
#1 A_1
#2 A_2
#3 A_3
#4 B_1
#5 B_2
#6 C_1
#7 C_2
#8 C_3
#9 C_4

数据

df <- data.frame(ind = c("A", "B", "C"), 
                 effect = c(3, 2, 4))

with mapply:

m <- mapply(paste, df$ind, sapply(df$effect, seq), sep = "_")

output

unlist(m)
#   A1    A2    A3    B1    B2    C1    C2    C3    C4 
#"A_1" "A_2" "A_3" "B_1" "B_2" "C_1" "C_2" "C_3" "C_4"

#or, as a data.frame object:
data.frame(new = unname(unlist(m)))
#  new
#1 A_1
#2 A_2
#3 A_3
#4 B_1
#5 B_2
#6 C_1
#7 C_2
#8 C_3
#9 C_4

data

df <- data.frame(ind = c("A", "B", "C"), 
                 effect = c(3, 2, 4))
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文