R:根据关联值对数据框中的列进行排序?

上颌骨

假设我有一个像这样的数据框:

df <- data.frame(First_Name=c("John","Alex","James","John","Alex","John","James"),
             Last_Name = c("Smith","Smith","Jones","Jones","Johnson","Ryan","Murphy"),
             Frequency = c(4,7,8,9,3,10,4))

  First_Name Last_Name Frequency
1       John     Smith         4
2       Alex     Smith         7
3      James     Jones         5
4       John     Jones         9
5       Alex   Johnson         3
6       John      Ryan        10
7      James    Murphy         4

并且我想只将第一列(名字)折叠成唯一值,然后根据其累积频率对名称进行排序。对于此示例,如果我们执行此操作并以降序排序,则其顺序为:John,James,Alex,因为它们各自的累积频率分别为23、10和12。

来自python背景,我当时想将值存储在一个元组中,但是我不确定R是否有一个等效项(目前,我只对向量很熟悉)。

另外,如果我尝试仅从“ First_Name”列中提取唯一值并将其存储在向量中:

unique(c(df$First_Name))

R输出以下内容:

[1] 3 1 2

这似乎表明他们将名称转换为整数。

所以我的问题是:

1)我将如何只获取唯一的名字并根据它们的累积值对它们进行排序?

2)如果我尝试将名称存储在向量中,为什么R会将名称转换为整数?

小女孩

R默认情况下将字符更改为因数,这可能很烦人。您可以通过以下命令进行检查:

str(df)

这表现了

'data.frame':   7 obs. of  3 variables:
 $ First_Name: Factor w/ 3 levels "Alex","James",..: 3 1 2 3 1 3 2
 $ Last_Name : Factor w/ 5 levels "Johnson","Jones",..: 5 5 2 2 1 4 3
 $ Frequency : num  4 7 8 9 3 10 4

如果添加stringsAsFactors标志,将避免这种情况:

df <- data.frame(First_Name=c("John","Alex","James","John","Alex","John","James"),
             Last_Name = c("Smith","Smith","Jones","Jones","Johnson","Ryan","Murphy"),
             Frequency = c(4,7,8,9,3,10,4), stringsAsFactors = FALSE)
str(df)
'data.frame':   7 obs. of  3 variables:
 $ First_Name: chr  "John" "Alex" "James" "John" ...
 $ Last_Name : chr  "Smith" "Smith" "Jones" "Jones" ...
 $ Frequency : num  4 7 8 9 3 10 4

但是,无论哪种方式,您都可以按唯一性分组,并使用聚合使用该子集的任何功能:

aggregate(Frequency ~ First_Name, data=df, FUN="sum")
  First_Name Frequency
1       Alex        10
2      James        12
3       John        23

可以使用订单功能对表格进行重新排序

out <- out[rev(order(out$Frequency)),]
  First_Name Frequency
3       John        23
2      James        12
1       Alex        10

如果要按累积摘要对第一个表重新排序,并保持其原样,则需要合并。

out$rank <- 1:nrow(out)
new <- merge(df, out, by.x='First_Name', by.y='First_Name')
final <- new[order(new$rank),]

  First_Name Last_Name Frequency.x Frequency.y rank
1       Alex     Smith           7          10    1
2       Alex   Johnson           3          10    1
3      James     Jones           8          12    2
4      James    Murphy           4          12    2
5       John     Smith           4          23    3
6       John     Jones           9          23    3
7       John      Ryan          10          23    3

然后删除不需要的列。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

根据R中另一个排序后的列值对数据框进行排序

根据列对数据框中的日期进行排序,并使用Pandas保持其他列的值

根据列的值和另一列中列表的长度对数据框进行排序

根据特定列中的值对数据框行进行排序

根据列中的固有值对数据框进行排序

如何根据列中的值对数据框的行进行重新排序

根据值条件对数据框中的列重新排序

根据列中的值对数据表进行排序

按R中的ALL列对数据框进行排序

在R中逐行对数据框的列进行重新排序

在R中逐行对数据框的列进行重新排序

根据列表对列进行排序,然后对数据框中的另一列进行排序

按 R 中的最小列值对数据框列表进行排序

如何根据R中两列不匹配的值对数据框进行子集化?

R使用dplyr根据一列中的最大值对数据框进行变异

如何使用python根据同一数据框中另一列的值对数据框中列中的值进行排序

R 数据框:如何根据另一列中不同值的列值对数据进行切片

根据列均值对数据框的列进行重新排序

根据列中的最大值对列进行排序 - R 数据框排列

在GroupBy之后根据特定列对数据框进行排序

根据列中值的前缀对数据框进行排序

根据列条件对数据框进行排序

根据多个列和条件对数据框进行排序

根据正值和负值对数据框列的值进行排序?

R:如何根据数字向量对数据框进行排序?

如何按R中每列的最后一个值对数据框中的列进行重新排序

根据另一个定制顺序的列对数据框中的列对进行排序

如何根据从列中获取的字符串变量对数据框的列进行排序

使用R中具有相同值的外部数据框对数据框进行排序