通过dplyr通过一组特定的索引进行变异
我使用的数据帧遵循以下模式:通过dplyr通过一组特定的索引进行变异,r,R,我使用的数据帧遵循以下模式: Key Data Loc Place1 Value1 6 Value2 7 Loc Place2 Value3 8 Loc Place3 Value1 9 Value2 10 Loc Place4 Value3 11 这是一个粗略的数据集,其中存在一个模式——在本例中,sep1100中的行,by=5将标识观察的第一个位置。我的目标是将这些位置的钥匙调整为不同的位置,例如LocA而不是Loc,以获得spreadke
Key Data
Loc Place1
Value1 6
Value2 7
Loc Place2
Value3 8
Loc Place3
Value1 9
Value2 10
Loc Place4
Value3 11
这是一个粗略的数据集,其中存在一个模式——在本例中,sep1100中的行,by=5将标识观察的第一个位置。我的目标是将这些位置的钥匙调整为不同的位置,例如LocA而不是Loc,以获得spreadkey值,从而为我提供可用于进一步分析的独特观察结果:
LocA Value1 Value2 Loc Value3
Place1 6 7 Place2 8
Place3 9 10 Place4 11
我一直在使用dplyr和一系列其他的变异和选择来达到这一点,所以我希望留在这条链中。我可以看到如何在链外使用适当的子集来实现这一点,但我很难用dplyr解决方案来解决这一问题。您的数据:
df <- structure(list(Key = c("Loc", "Value1", "Value2", "Loc", "Value3",
"Loc", "Value1", "Value2", "Loc", "Value3"), Data = c("Place1",
"6", "7", "Place2", "8", "Place3", "9", "10", "Place4", "11")), .Names = c("Key",
"Data"), row.names = c(NA, -10L), class = "data.frame")
这可行吗
library(dplyr)
library(tidyr)
df %>%
mutate(grp = (row_number() - 1) %/% 5) %>%
group_by(grp) %>%
mutate(
Key = ifelse(! duplicated(Key), Key, paste0(Key, "A"))
) %>%
ungroup() %>%
spread(Key, Data) %>%
select(-grp)
# Source: local data frame [2 x 5]
# Loc LocA Value1 Value2 Value3
# * <chr> <chr> <chr> <chr> <chr>
# 1 Place1 Place2 6 7 8
# 2 Place3 Place4 9 10 11
您的数据:
df <- structure(list(Key = c("Loc", "Value1", "Value2", "Loc", "Value3",
"Loc", "Value1", "Value2", "Loc", "Value3"), Data = c("Place1",
"6", "7", "Place2", "8", "Place3", "9", "10", "Place4", "11")), .Names = c("Key",
"Data"), row.names = c(NA, -10L), class = "data.frame")
这可行吗
library(dplyr)
library(tidyr)
df %>%
mutate(grp = (row_number() - 1) %/% 5) %>%
group_by(grp) %>%
mutate(
Key = ifelse(! duplicated(Key), Key, paste0(Key, "A"))
) %>%
ungroup() %>%
spread(Key, Data) %>%
select(-grp)
# Source: local data frame [2 x 5]
# Loc LocA Value1 Value2 Value3
# * <chr> <chr> <chr> <chr> <chr>
# 1 Place1 Place2 6 7 8
# 2 Place3 Place4 9 10 11
这是另一种方法。我承认这一个不会像上面提到的那个那么好
df <- structure(list(Key = c("Loc", "Value1", "Value2", "Loc", "Value3",
"Loc", "Value1", "Value2", "Loc", "Value3"), Data = c("Place1",
"6", "7", "Place2", "8", "Place3", "9", "10", "Place4", "11")), .Names = c("Key",
"Data"), row.names = c(NA, -10L), class = "data.frame")
library(dplyr)
library(tidry)
df %>%
mutate(gid = ceiling(row_number() / 5)) %>%
group_by(gid) %>%
summarize(concatenated_text = str_c(Data, collapse = ",")) %>%
separate(concatenated_text, into = c("LocA", "Value1", "Value2", "Loc", "Value3"), sep=",")
这是另一种方法。我承认这一个不会像上面提到的那个那么好
df <- structure(list(Key = c("Loc", "Value1", "Value2", "Loc", "Value3",
"Loc", "Value1", "Value2", "Loc", "Value3"), Data = c("Place1",
"6", "7", "Place2", "8", "Place3", "9", "10", "Place4", "11")), .Names = c("Key",
"Data"), row.names = c(NA, -10L), class = "data.frame")
library(dplyr)
library(tidry)
df %>%
mutate(gid = ceiling(row_number() / 5)) %>%
group_by(gid) %>%
summarize(concatenated_text = str_c(Data, collapse = ",")) %>%
separate(concatenated_text, into = c("LocA", "Value1", "Value2", "Loc", "Value3"), sep=",")
. %>% mutateGP=repseq1100,by=5,each=5%>%group_bygrp%>%mutateKey=paste0Key,grp可能是一个开始,看起来很难看。我忽略了我创建了一个id/grp列,如您所示-问题只是将每个组的第一个Loc更改为相同的新键名,而所有其他键保持不变。我要再考虑一下..%>%mutateGP=repseq1100,by=5,each=5%>%group_bygrp%>%mutateKey=paste0Key,grp可能是一个开始,看起来很难看。我忽略了我创建了一个id/grp列,如您所示-问题只是将每个组的第一个Loc更改为相同的新键名,而所有其他键保持不变。我要再考虑一下。太棒了。它还容纳了我忽略的东西——我有另一个重复的键,表示与LocA相关的其他属性。我很抱歉没有像您那样以更好的格式提供数据。太棒了。它还容纳了我忽略的东西——我有另一个重复的键,表示与LocA相关的其他属性。我很抱歉没有像您那样以更好的格式提供数据。也感谢您的回答。这让我意识到我需要深入研究stringr。我没有考虑过在一个小组内单独使用stru_c。同样感谢您的回答。这让我意识到我需要深入研究stringr。我没有考虑过在一个团队中使用单独的stru_c。