我有一個與下面等效結構的大型資料集。
input.data <- data.frame(Continent = rep("Asia", 5),
Country = rep("India", 5),
Country.lat = rep(20.5937, 5),
Country.long = rep(78.9629, 5),
State = rep("Punjab", 5),
Region = rep("Ludhiana", 5),
Animal.group = rep("Mammal", 5),
Species.guild = c("Carnivore", "Omnivore\nOmnivore", "Omnivore\nOmnivore\nCarnivore", "Omnivore\nOmnivore\nCarnivore", "Herbivore\nOmnivore\nCarnivore\nCarnivore"),
Family = c("Canidae", "Muridae\nMuridae", "Muridae\nMuridae\nCanidae", "Muridae\nMuridae\nCanidae", "Leporidae\nMuridae\nCanidae\nCanidae"),
Scientific.name = c("Canis familiaris", "Mus musculus\nRattus rattus", "Mus musculus\nRattus rattus\nCanis familiaris", "Mus musculus\nRattus rattus\nCanis familiaris", "Oryctolagus cuniculus\nRattus rattus\nCanis familiaris\nCanis familiaris"),
Common.name = c("Dog", "House mouse\nBlack rat", "House mouse\nBlack rat\nDog", "House mouse\nBlack rat\nDog", "European rabbit\nBlack rat\nDog\nDog"),
Num.species = c(1, 2, 3, 3, 4),
Bait.state = rep("Solid", 5),
Bait.deliv.broad = rep("Toxin", 5),
Bait.deliv.specific = "1080\n1080\n1080\n1080\n1080")
input.data有 5 個觀測值,每個觀測值代表一個單獨的實驗。然而,一些(但不是全部)實驗集中在一個以上的物種上,因此在一個單元格中有多個條目。這使得總結物種相關資訊變得非常困難,包括input.data$Species.guild、和。為了能夠總結這些資料,我需要進行擴展,以便新資料框 ( ) 每個單元格僅包含一條資訊,否則同一行上的所有其他相關資訊保持不變。input.data$Familyinput.data$Scientific.nameinput.data$Common.nameinput.dataoutput.data
請注意,如果單個單元格中存在多條資訊,則它們由回車分隔\n
生成的資料框應如下所示(行不必一定是相同的順序)。
非常感謝您的幫助
output.data <- data.frame(Continent = rep("Asia", 13),
Country = rep("India", 13),
Country.lat = rep(20.5937, 13),
Country.long = rep(78.9629, 13),
State = rep("Punjab", 13),
Region = rep("Ludhiana", 13),
Animal.group = rep("Mammal", 13),
Species.guild = c("Carnivore", "Omnivore", "Omnivore", "Omnivore", "Omnivore", "Carnivore", "Omnivore", "Omnivore", "Carnivore", "Herbivore", "Omnivore", "Carnivore", "Carnivore"),
Family = c("Canidae", "Muridae", "Muridae", "Muridae", "Muridae", "Canidae", "Muridae", "Muridae", "Canidae", "Leporidae", "Muridae", "Canidae", "Canidae"),
Scientific.name = c("Canis familiaris", "Mus musculus", "Rattus rattus", "Mus musculus", "Rattus rattus", "Canis familiaris", "Mus musculus", "Rattus rattus", "Canis familiaris", "Oryctolagus cuniculus", "Rattus rattus", "Canis familiaris", "Canis familiaris"),
Common.name = c("Dog", "House mouse", "Black rat", "House mouse", "Black rat", "Dog", "House mouse", "Black rat", "Dog", "European rabbit", "Black rat", "Dog", "Dog"),
Num.species = rep(1, 13),
Bait.state = rep("Solid", 13),
Bait.deliv.broad = rep("Toxin", 13),
Bait.deliv.specific = c("1080", "1080", "1080", "1080", "1080", "1080", "1080", "1080", "1080", "1080", "1080", "1080", "1080"))
uj5u.com熱心網友回復:
input.data %>%
separate_rows(Species.guild, Family, Scientific.name, Common.name, sep = '\n')
# A tibble: 13 x 15
Continent Country Country.lat Country.long State Region Animal.group
<chr> <chr> <dbl> <dbl> <chr> <chr> <chr>
1 Asia India 20.6 79.0 Punjab Ludhiana Mammal
2 Asia India 20.6 79.0 Punjab Ludhiana Mammal
3 Asia India 20.6 79.0 Punjab Ludhiana Mammal
4 Asia India 20.6 79.0 Punjab Ludhiana Mammal
5 Asia India 20.6 79.0 Punjab Ludhiana Mammal
6 Asia India 20.6 79.0 Punjab Ludhiana Mammal
7 Asia India 20.6 79.0 Punjab Ludhiana Mammal
8 Asia India 20.6 79.0 Punjab Ludhiana Mammal
9 Asia India 20.6 79.0 Punjab Ludhiana Mammal
10 Asia India 20.6 79.0 Punjab Ludhiana Mammal
11 Asia India 20.6 79.0 Punjab Ludhiana Mammal
12 Asia India 20.6 79.0 Punjab Ludhiana Mammal
13 Asia India 20.6 79.0 Punjab Ludhiana Mammal
#..with 8 more variables: Species.guild <chr>, Family <chr>,
# Scientific.name <chr>, Common.name <chr>, Num.species <dbl>, Bait.state <chr>,
# Bait.deliv.broad <chr>, Bait.deliv.specific <chr>
uj5u.com熱心網友回復:
由于最后一列具有使分離不均勻的附加值,您可以使用splitstackshape::cSplitand zoo::na.locf。
library(splitstackshape)
library(zoo)
df <- cSplit(input.data, c(8:11, 15), "long", sep = "\n", drop = TRUE)
na.locf(df[rowSums(is.na(df)) != ncol(df),])
輸出
Continent Country Country.lat Country.long State Region Animal.group Species.guild Family Scientific.name Common.name Num.species Bait.state Bait.deliv.broad Bait.deliv.specific
1: Asia India 20.5937 78.9629 Punjab Ludhiana Mammal Carnivore Canidae Canis familiaris Dog 1 Solid Toxin 1080
2: Asia India 20.5937 78.9629 Punjab Ludhiana Mammal Carnivore Canidae Canis familiaris Dog 1 Solid Toxin 1080
3: Asia India 20.5937 78.9629 Punjab Ludhiana Mammal Carnivore Canidae Canis familiaris Dog 1 Solid Toxin 1080
4: Asia India 20.5937 78.9629 Punjab Ludhiana Mammal Carnivore Canidae Canis familiaris Dog 1 Solid Toxin 1080
5: Asia India 20.5937 78.9629 Punjab Ludhiana Mammal Carnivore Canidae Canis familiaris Dog 1 Solid Toxin 1080
6: Asia India 20.5937 78.9629 Punjab Ludhiana Mammal Omnivore Muridae Mus musculus House mouse 2 Solid Toxin 1080
7: Asia India 20.5937 78.9629 Punjab Ludhiana Mammal Omnivore Muridae Rattus rattus Black rat 2 Solid Toxin 1080
8: Asia India 20.5937 78.9629 Punjab Ludhiana Mammal Omnivore Muridae Rattus rattus Black rat 2 Solid Toxin 1080
9: Asia India 20.5937 78.9629 Punjab Ludhiana Mammal Omnivore Muridae Rattus rattus Black rat 2 Solid Toxin 1080
10: Asia India 20.5937 78.9629 Punjab Ludhiana Mammal Omnivore Muridae Rattus rattus Black rat 2 Solid Toxin 1080
11: Asia India 20.5937 78.9629 Punjab Ludhiana Mammal Omnivore Muridae Mus musculus House mouse 3 Solid Toxin 1080
12: Asia India 20.5937 78.9629 Punjab Ludhiana Mammal Omnivore Muridae Rattus rattus Black rat 3 Solid Toxin 1080
13: Asia India 20.5937 78.9629 Punjab Ludhiana Mammal Carnivore Canidae Canis familiaris Dog 3 Solid Toxin 1080
14: Asia India 20.5937 78.9629 Punjab Ludhiana Mammal Carnivore Canidae Canis familiaris Dog 3 Solid Toxin 1080
15: Asia India 20.5937 78.9629 Punjab Ludhiana Mammal Carnivore Canidae Canis familiaris Dog 3 Solid Toxin 1080
16: Asia India 20.5937 78.9629 Punjab Ludhiana Mammal Omnivore Muridae Mus musculus House mouse 3 Solid Toxin 1080
17: Asia India 20.5937 78.9629 Punjab Ludhiana Mammal Omnivore Muridae Rattus rattus Black rat 3 Solid Toxin 1080
18: Asia India 20.5937 78.9629 Punjab Ludhiana Mammal Carnivore Canidae Canis familiaris Dog 3 Solid Toxin 1080
19: Asia India 20.5937 78.9629 Punjab Ludhiana Mammal Carnivore Canidae Canis familiaris Dog 3 Solid Toxin 1080
20: Asia India 20.5937 78.9629 Punjab Ludhiana Mammal Carnivore Canidae Canis familiaris Dog 3 Solid Toxin 1080
21: Asia India 20.5937 78.9629 Punjab Ludhiana Mammal Herbivore Leporidae Oryctolagus cuniculus European rabbit 4 Solid Toxin 1080
22: Asia India 20.5937 78.9629 Punjab Ludhiana Mammal Omnivore Muridae Rattus rattus Black rat 4 Solid Toxin 1080
23: Asia India 20.5937 78.9629 Punjab Ludhiana Mammal Carnivore Canidae Canis familiaris Dog 4 Solid Toxin 1080
24: Asia India 20.5937 78.9629 Punjab Ludhiana Mammal Carnivore Canidae Canis familiaris Dog 4 Solid Toxin 1080
25: Asia India 20.5937 78.9629 Punjab Ludhiana Mammal Carnivore Canidae Canis familiaris Dog 4 Solid Toxin 1080
或者,如果您只需要與其他列中所表示的相同數量的值,那么如評論中所述,您可以使用separate_rowsfrom tidyverse。Bait.deliv.specific但是我們可以根據另一列(如)修剪值的數量Species.guild,然后我們可以同時分離所有需要的列。
library(tidyverse)
input.data %>%
mutate(x = str_count(Species.guild, "\n")) %>%
rowwise %>%
mutate(Bait.deliv.specific = paste0(strsplit(Bait.deliv.specific, "\n")[[1]][1:(x 1)], collapse = "\n")) %>%
ungroup %>%
separate_rows(., c(8:11, 15), sep = "\n")
輸出
# A tibble: 13 × 15
Continent Country Country.lat Country.long State Region Animal.group Species.guild Family Scientific.name Common.name Num.species Bait.state Bait.deliv.broad Bait.deliv.specific
<chr> <chr> <dbl> <dbl> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <dbl> <chr> <chr> <chr>
1 Asia India 20.6 79.0 Punjab Ludhiana Mammal Carnivore Canidae Canis familiaris Dog 1 Solid Toxin 1080
2 Asia India 20.6 79.0 Punjab Ludhiana Mammal Omnivore Muridae Mus musculus House mouse 2 Solid Toxin 1080
3 Asia India 20.6 79.0 Punjab Ludhiana Mammal Omnivore Muridae Rattus rattus Black rat 2 Solid Toxin 1080
4 Asia India 20.6 79.0 Punjab Ludhiana Mammal Omnivore Muridae Mus musculus House mouse 3 Solid Toxin 1080
5 Asia India 20.6 79.0 Punjab Ludhiana Mammal Omnivore Muridae Rattus rattus Black rat 3 Solid Toxin 1080
6 Asia India 20.6 79.0 Punjab Ludhiana Mammal Carnivore Canidae Canis familiaris Dog 3 Solid Toxin 1080
7 Asia India 20.6 79.0 Punjab Ludhiana Mammal Omnivore Muridae Mus musculus House mouse 3 Solid Toxin 1080
8 Asia India 20.6 79.0 Punjab Ludhiana Mammal Omnivore Muridae Rattus rattus Black rat 3 Solid Toxin 1080
9 Asia India 20.6 79.0 Punjab Ludhiana Mammal Carnivore Canidae Canis familiaris Dog 3 Solid Toxin 1080
10 Asia India 20.6 79.0 Punjab Ludhiana Mammal Herbivore Leporidae Oryctolagus cuniculus European rabbit 4 Solid Toxin 1080
11 Asia India 20.6 79.0 Punjab Ludhiana Mammal Omnivore Muridae Rattus rattus Black rat 4 Solid Toxin 1080
12 Asia India 20.6 79.0 Punjab Ludhiana Mammal Carnivore Canidae Canis familiaris Dog 4 Solid Toxin 1080
13 Asia India 20.6 79.0 Punjab Ludhiana Mammal Carnivore Canidae Canis familiaris Dog 4 Solid Toxin 1080
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/460005.html
標籤:r
