Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
通过dplyr通过一组特定的索引进行变异_R - Fatal编程技术网

通过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。