是否可以在R中的单列行中存储和分析多个值? 我正在使用相当大的数据集,但是对于我的问题的上下文,请考虑下面的例子:我从2个数据帧开始。code>DF1包含农场信息(位置、工人数量等),而DF2包含每个农场收获哪些作物的信息 DF1 # Farm Num_Workers State #1 Tom's 20 FL #2 Joe's 5 TX #3 Sam's 9 CA DF2 # Farm Crop #1 Tom's Corn #2 Tom's Wheat #3 Sam's Corn #4 Sam's Green Beans #5 Sam's Apples #5 Sam's Melon #6 Joe's Wheat #Without aggregating creates duplicates left_join(df1, df2, by = "Farm) # Farm Num_Workers State Crop #1 Tom's 20 FL Corn #2 Tom's 20 FL Wheat #3 Sam's 9 CA Corn #4 Sam's 9 CA Green Beans #5 Sam's 9 CA Apples #5 Sam's 9 CA Melon #6 Joe's 5 TX Wheat

是否可以在R中的单列行中存储和分析多个值? 我正在使用相当大的数据集,但是对于我的问题的上下文,请考虑下面的例子:我从2个数据帧开始。code>DF1包含农场信息(位置、工人数量等),而DF2包含每个农场收获哪些作物的信息 DF1 # Farm Num_Workers State #1 Tom's 20 FL #2 Joe's 5 TX #3 Sam's 9 CA DF2 # Farm Crop #1 Tom's Corn #2 Tom's Wheat #3 Sam's Corn #4 Sam's Green Beans #5 Sam's Apples #5 Sam's Melon #6 Joe's Wheat #Without aggregating creates duplicates left_join(df1, df2, by = "Farm) # Farm Num_Workers State Crop #1 Tom's 20 FL Corn #2 Tom's 20 FL Wheat #3 Sam's 9 CA Corn #4 Sam's 9 CA Green Beans #5 Sam's 9 CA Apples #5 Sam's 9 CA Melon #6 Joe's 5 TX Wheat,r,dataframe,R,Dataframe,如您所见,DF2中的每个场都有多个条目,这在使用数据帧执行左联接时会在DF1中引入重复的行(并且错误地增加了工人总数,num\u工人)。为了防止重复,我按农场聚合DF2,生产DF3。然后,我用DF1左键连接这个新的数据帧,以创建最终的数据帧 DF3 <- aggregate(Farm ~ Crop, data = DF2, paste, collapse = ",") FINAL <- left_join(DF1, DF3, by = "Farm&quo

如您所见,
DF2
中的每个场都有多个条目,这在使用数据帧执行
左联接时会在
DF1
中引入重复的行(并且错误地增加了工人总数,
num\u工人
)。为了防止重复,我按农场聚合
DF2
,生产
DF3
。然后,我用
DF1
左键连接
这个新的数据帧,以创建
最终的
数据帧

DF3 <- aggregate(Farm ~ Crop, data = DF2, paste, collapse = ",")
FINAL <- left_join(DF1, DF3, by = "Farm")

FINAL                               
#  Farm    Num_Workers  State  Crop
#1 Tom's   20           FL     Corn, Wheat
#2 Joe's   5            TX     Wheat
#3 Sam's   9            CA     Corn, Green Beans, Apples, Melon


DF3第一组为
Farm
。 然后
总结
并使用
粘贴
折叠
然后
left\u加入

library(dplyr)
DF2 <- DF2 %>% 
  group_by(Farm) %>% 
  summarise(Crop = paste(Crop, collapse = " "))

DF1 <- DF1 %>% 
  left_join(DF2, by ="Farm")

DF1
库(dplyr)
DF2%
组别(农场)%>%
总结(裁剪=粘贴(裁剪,折叠=”)
DF1%
左联合(DF2,by=“农场”)
DF1
输出:

  Farm  Num_Workers State Crop                         
  <chr>       <dbl> <chr> <chr>                        
1 Tom's          20 FL    Corn Wheat                   
2 Joe's           5 TX    Wheat                        
3 Sam's           9 CA    Corn Green Beans Apples Melon
Farm Num\u Workers状态作物
1汤姆的20层玉米小麦
2乔的5吨小麦
3 Sam's 9 CA玉米绿豆苹果甜瓜

我认为最好的方法是通过dplyr包。首先创建计数列,然后执行联接

###Create a count column

DF2$count = 1
#### Join tables first ###
DF3<- left_join(DF1, DF2, by = "Farm")
#### Then sum count and combine 
DF3<-DF3 %>%
group_by(Farm, Crop, Num_Workers) %>%
summarize(number_of_crops = sum(count))

Final<-DF3 %>%
group_by(Farm, Num_Workers) %>%
summarize(Crop_Num = paste(number_of_crops, collapse =","),
         Crop =  paste(Crop, collapse =","))

###创建计数列
DF2$count=1
####先连接表###
DF3%
汇总(作物数量=总和(计数))
最终百分比
分组依据(农场、工人数量)%>%
汇总(Crop_Num=粘贴(Crop_的数量,collapse=“,”),
裁剪=粘贴(裁剪,折叠=“,”)
您可以执行以下操作:

df3 <- left_join(df1, df2) 


df3 %>% count(Crop) # Frequency of crop


df3 %>% count(State, Crop) # Frequency of crop by state
df3%计数(作物)#作物频率
df3%>%计数(州、作物)#各州作物频率

您可以将其转换为
列表
列,而不是
粘贴
,即
聚合(Farm~Crop,data=DF2,FUN=c)
,然后您可以使用
lapply/sapply
等查看
列表
,您应该直接左键加入。不会有重复的行。还要注意的是,具有相似公司但不同作物的两行不会重复。这绝不会增加失业人数workers@akrun还有Onyanbu:你觉得我的解决方案怎么样?@Onyanbu我更新了这个问题来演示如何使用左连接创建副本。@akrun我将研究这个方法,谢谢!如果您使用的是tidyverse,也可以使用
str_c(Crop,collapse='')
我该如何用这种方法对作物数量进行实际量化?这似乎产生了和我之前差不多的结果。好吧,我现在明白了。起初,我对这种方法感到紧张,因为我实际上正在处理一个包含多个dfs和匹配dfs的列表,但我现在才开始完全了解管道。非常感谢您的耐心和花时间向我演示@妮可:你不应该把它们折叠成一根绳子。请注意,您没有重复项。我可能使用了错误的术语,但我所说的“重复项”指的是,如果我使用此新数据帧,并转到工作总数
sum(DF3$Num_workers)
现在返回不正确的值
[1]81
,而不是所需的输出
[1]34
。我现在明白了,我可能可以通过分组和管道的某种组合来生成正确的输出,但到目前为止,我在这个模拟数据集上尝试的所有操作都抛出了一个错误或返回了一个tibble。@Nicole这不是如何查找工作人员的数量。只有在每个工人都有一种作物的情况下,这才有效。但是在上面的数据集中,一个工人可以有多种作物。您得到了什么错误?是的,我感兴趣的是不受作物变量影响的工人总数(即每个
农场的
Num_工人
),正如我在原始数据框DF1中所做的那样。即使在确保列是数值的
df3$Num_Workers%groupu_by(“Farm”)%%>%sum(“Num_Workers”)
在FUN(X[[i]],…)中打印消息
错误:仅在包含所有数值变量的数据帧上定义。
sum(count())
也不走运。以前的错误是“找不到对象”。