将单行数据转换为包含它们组合数值的多行数据。

huangapple go评论101阅读模式
英文:

Pivoting single rows into rows with their combined values

问题

I can help you with the translation. Here's the translated text:

我想将列word转换为另一列,但原始行要以_分隔方式合并在一起。

原始内容:

  1. > head(df, 10)
  2. # A tibble: 10 x 1
  3. word
  4. <chr>
  5. 1 Jason
  6. 2 Oscar
  7. 3 Maleeka
  8. 4 Janet
  9. 5 Gabriel
  10. 6 Raheema
  11. 7 Bryce
  12. 8 Nasreen
  13. 9 Hishaam
  14. 10 Thadduse

期望的输出:

  1. word
  2. Jason_Oscar_Maleeka_Janet_Gabriel_Raheema_Bryce_Nasreen_Hishaam_Thadduse
  3. .
  4. .
  5. .

问题:

  1. 如何将word列旋转,以便每一行包含10个单词,以"_"分隔?(Tidyverse和stringr方法将不胜感激 - 谢谢!)

数据:

  1. > dput(df)
  2. structure(list(word = c("Jason", "Oscar", "Maleeka", "Janet",
  3. "Gabriel", "Raheema", "Bryce", "Nasreen", "Hishaam", "Thadduse",
  4. "Marcos", "Daijah", "Chassity", "Carlito", "Chidiebere", "Matthew",
  5. "Maureene", "Jillian", "Markus", "Aaron", "Ramziyya", "Marquez",
  6. "Kiera", "Farajallah", "Larisa", "Davier", "Shujaa", "Vincent",
  7. "Orlando", "Joseph", "Desean", "Chelsea", "Faadil", "Christopher",
  8. "Aarifa", "Joel", "Matthew", "Jacob", "Aeones", "Matthew", "Jacob",
  9. "Savannah", "Nadia", "Kaleem", "Tanner", "Sabeeha", "Caitlyn",
  10. "Taylor", "Sydney", "Devin")), class = c("tbl_df", "tbl", "data.frame"
  11. ), row.names = c(NA, -50L))
英文:

I would like to transform the column word into another column, but with the original rows combined together, separed by _.

  • Original:
  1. > head(df, 10)
  2. # A tibble: 10 x 1
  3. word
  4. <chr>
  5. 1 Jason
  6. 2 Oscar
  7. 3 Maleeka
  8. 4 Janet
  9. 5 Gabriel
  10. 6 Raheema
  11. 7 Bryce
  12. 8 Nasreen
  13. 9 Hishaam
  14. 10 Thadduse
  • desired output:
  1. word
  2. Jason_Oscar_Maleeka_Janet_Gabriel_Raheema_Bryce_Nasreen_Hishaam_Thadduse
  3. .
  4. .
  5. .

Question

1 How do I pivot word so that each new row contains 10 words per row separated by "_" ? (Tidyverse and stringr approaches would be much appreciated - thanks!)

  • Data:
  1. > dput(df)
  2. structure(list(word = c("Jason", "Oscar", "Maleeka", "Janet",
  3. "Gabriel", "Raheema", "Bryce", "Nasreen", "Hishaam", "Thadduse",
  4. "Marcos", "Daijah", "Chassity", "Carlito", "Chidiebere", "Matthew",
  5. "Maureene", "Jillian", "Markus", "Aaron", "Ramziyya", "Marquez",
  6. "Kiera", "Farajallah", "Larisa", "Davier", "Shujaa", "Vincent",
  7. "Orlando", "Joseph", "Desean", "Chelsea", "Faadil", "Christopher",
  8. "Aarifa", "Joel", "Matthew", "Jacob", "Aeones", "Matthew", "Jacob",
  9. "Savannah", "Nadia", "Kaleem", "Tanner", "Sabeeha", "Caitlyn",
  10. "Taylor", "Sydney", "Devin")), class = c("tbl_df", "tbl", "data.frame"
  11. ), row.names = c(NA, -50L))

答案1

得分: 4

以下是您要的中文翻译:
"你所描述的不完全是一个准确的数据透视,但您可以按照以下方式实现它:

  1. library(tidyverse)
  2. df %>%
  3. group_by((row_number() - 1) %/% 10) %>%
  4. summarise(word = paste(word, collapse = '_')) %>%
  5. select(word)
  6. #> # A tibble: 5 x 1
  7. #> word
  8. #> <chr>
  9. #> 1 Jason_Oscar_Maleeka_Janet_Gabriel_Raheema_Bryce_Nasreen_Hishaam_Thadduse
  10. #> 2 Marcos_Daijah_Chassity_Carlito_Chidiebere_Matthew_Maureene_Jillian_Markus_Aaron
  11. #> 3 Ramziyya_Marquez_Kiera_Farajallah_Larisa_Davier_Shujaa_Vincent_Orlando_Joseph
  12. #> 4 Desean_Chelsea_Faadil_Christopher_Aarifa_Joel_Matthew_Jacob_Aeones_Matthew
  13. #> 5 Jacob_Savannah_Nadia_Kaleem_Tanner_Sabeeha_Caitlyn_Taylor_Sydney_Devin

"

英文:

What you are describing isn't a pivot exactly, but you can achieve it as follows:

  1. library(tidyverse)
  2. df %&gt;%
  3. group_by((row_number() - 1) %/% 10) %&gt;%
  4. summarise(word = paste(word, collapse = &#39;_&#39;)) %&gt;%
  5. select(word)
  6. #&gt; # A tibble: 5 x 1
  7. #&gt; word
  8. #&gt; &lt;chr&gt;
  9. #&gt; 1 Jason_Oscar_Maleeka_Janet_Gabriel_Raheema_Bryce_Nasreen_Hishaam_Thadduse
  10. #&gt; 2 Marcos_Daijah_Chassity_Carlito_Chidiebere_Matthew_Maureene_Jillian_Markus_Aaron
  11. #&gt; 3 Ramziyya_Marquez_Kiera_Farajallah_Larisa_Davier_Shujaa_Vincent_Orlando_Joseph
  12. #&gt; 4 Desean_Chelsea_Faadil_Christopher_Aarifa_Joel_Matthew_Jacob_Aeones_Matthew
  13. #&gt; 5 Jacob_Savannah_Nadia_Kaleem_Tanner_Sabeeha_Caitlyn_Taylor_Sydney_Devin

答案2

得分: 4

这是一个基于 R 语言的代码示例,使用了矩阵方法来创建数据框。代码部分不需要翻译,以下是翻译的内容:

  1. 这是一个基于 R 语言的选项,使用了 `matrix` 方法来创建数据框
  1. 这会得到以下结果:
  1. word
  2. 1 Jason_Oscar_Maleeka_Janet_Gabriel_Raheema_Bryce_Nasreen_Hishaam_Thadduse
  3. 2 Marcos_Daijah_Chassity_Carlito_Chidiebere_Matthew_Maureene_Jillian_Markus_Aaron
  4. 3 Ramziyya_Marquez_Kiera_Farajallah_Larisa_Davier_Shujaa_Vincent_Orlando_Joseph
  5. 4 Desean_Chelsea_Faadil_Christopher_Aarifa_Joel_Matthew_Jacob_Aeones_Matthew
  6. 5 Jacob_Savannah_Nadia_Kaleem_Tanner_Sabeeha_Caitlyn_Taylor_Sydney_Devin

请注意,这只是代码和结果的描述,不包括实际代码或数据框的内容。

英文:

Here is a base R option with matrix approach

  1. data.frame(
  2. word =
  3. do.call(
  4. paste,
  5. c(as.data.frame(matrix(unlist(df), ncol = 10, byrow = TRUE)),
  6. sep = &quot;_&quot;
  7. )
  8. )
  9. )

which gives

  1. word
  2. 1 Jason_Oscar_Maleeka_Janet_Gabriel_Raheema_Bryce_Nasreen_Hishaam_Thadduse
  3. 2 Marcos_Daijah_Chassity_Carlito_Chidiebere_Matthew_Maureene_Jillian_Markus_Aaron
  4. 3 Ramziyya_Marquez_Kiera_Farajallah_Larisa_Davier_Shujaa_Vincent_Orlando_Joseph
  5. 4 Desean_Chelsea_Faadil_Christopher_Aarifa_Joel_Matthew_Jacob_Aeones_Matthew
  6. 5 Jacob_Savannah_Nadia_Kaleem_Tanner_Sabeeha_Caitlyn_Taylor_Sydney_Devin

答案3

得分: 3

以下是您提供的代码的中文翻译部分:

使用 tidyverse 进行实际数据透视的另一种方法。

  1. library(tidyverse)
  2. df %>%
  3. mutate(rn = rep(1:10, nrow(.) %/% 10),
  4. group = rep(1:5, each = nrow(.) %/% 5)) %>%
  5. pivot_wider(names_from = rn, values_from = word) %>%
  6. select(-group) %>%
  7. unite(col = word, sep = "_")

以下修改后的版本虽然不太美观,但更具动态性(即您只需将值更改为 word_number,无需修改管道操作)。

  1. word_number <- 10
  2. set_number <- nrow(df) %/% word_number
  3. df %>%
  4. mutate(rn = rep(1:word_number, set_number),
  5. group = rep(1:set_number, each = nrow(.) %/% set_number)) %>%
  6. pivot_wider(names_from = rn, values_from = word) %>%
  7. select(-group) %>%
  8. unite(col = word, sep = "_")

输出

  1. # A tibble: 5 × 1
  2. word
  3. 1 Jason_Oscar_Maleeka_Janet_Gabriel_Raheema_Bryce_Nasreen_Hishaam_Thadduse
  4. 2 Marcos_Daijah_Chassity_Carlito_Chidiebere_Matthew_Maureene_Jillian_Markus_Aaron
  5. 3 Ramziyya_Marquez_Kiera_Farajallah_Larisa_Davier_Shujaa_Vincent_Orlando_Joseph
  6. 4 Desean_Chelsea_Faadil_Christopher_Aarifa_Joel_Matthew_Jacob_Aeones_Matthew
  7. 5 Jacob_Savannah_Nadia_Kaleem_Tanner_Sabeeha_Caitlyn_Taylor_Sydney_Devin

希望这对您有帮助。如果您需要进一步的翻译或解释,请告诉我。

英文:

Another way to do it with tidyverse, with real pivoting.

  1. library(tidyverse)
  2. df %&gt;%
  3. mutate(rn = rep(1:10, nrow(.) %/% 10),
  4. group = rep(1:5, each = nrow(.) %/% 5)) %&gt;%
  5. pivot_wider(names_from = rn, values_from = word) %&gt;%
  6. select(-group) %&gt;%
  7. unite(col = word, sep = &quot;_&quot;)

<hr>

The following modified version is ugly, but is more dynamic (i.e. you only need to change the value to word_number without the need to modify the piped operation).

  1. word_number &lt;- 10
  2. set_number &lt;- nrow(df) %/% word_number
  3. df %&gt;%
  4. mutate(rn = rep(1:word_number, set_number),
  5. group = rep(1:set_number, each = nrow(.) %/% set_number)) %&gt;%
  6. pivot_wider(names_from = rn, values_from = word) %&gt;%
  7. select(-group) %&gt;%
  8. unite(col = word, sep = &quot;_&quot;)

<hr>

Output

  1. # A tibble: 5 &#215; 1
  2. word
  3. &lt;chr&gt;
  4. 1 Jason_Oscar_Maleeka_Janet_Gabriel_Raheema_Bryce_Nasreen_Hishaam_Thadduse
  5. 2 Marcos_Daijah_Chassity_Carlito_Chidiebere_Matthew_Maureene_Jillian_Markus_Aaron
  6. 3 Ramziyya_Marquez_Kiera_Farajallah_Larisa_Davier_Shujaa_Vincent_Orlando_Joseph
  7. 4 Desean_Chelsea_Faadil_Christopher_Aarifa_Joel_Matthew_Jacob_Aeones_Matthew
  8. 5 Jacob_Savannah_Nadia_Kaleem_Tanner_Sabeeha_Caitlyn_Taylor_Sydney_Devin

huangapple
  • 本文由 发表于 2023年5月11日 20:19:57
  • 转载请务必保留本文链接:https://go.coder-hub.com/76227586.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定