假设我有一个氨纶:

> df <- data.frame(
    id = 1:10,
    name = c("Bob", "Ashley", "James", "David", "Jenny",
      "Hans", "Leo", "John", "Emily", "Lee"),
    gender = c("Male", "Female", "Male", "Male", "Female", 
      "Male", "Male", "Male", "Female", "Female"))

我不想要这样的标准输出:

> df
   id   name gender
1   1    Bob   Male
2   2 Ashley Female
3   3  James   Male
4   4  David   Male
5   5  Jenny Female
6   6   Hans   Male
7   7    Leo   Male
8   8   John   Male
9   9  Emily Female
10 10    Lee Female

相反,我想知道哪些名字适合女性,哪些名字适合男性:

Female Male
Ashley Bob
Jenny James
Emily David
Lee Hans
Leo
John

有很多函数可以返回每个组合的计数(有多少男性,或有多少詹姆斯),但我一直无法弄清楚如何获取可能的组合.

推荐答案

显然你想要这个

> split(df$name, df$gender) |> lapply(`length<-`, max(table(df$gender))) |> as.data.frame()
  Female  Male
1 Ashley   Bob
2  Jenny James
3  Emily David
4    Lee  Hans
5   <NA>   Leo
6   <NA>  John

根据您的 comments ,这里有一个包含10个小组而不是只有2个小组的小例子:

> set.seed(42)
> df <- data.frame(name=LETTERS, group=sample.int(10, 26, replace=TRUE))
> split(df$name, df$group) |> lapply(`length<-`, max(table(df$group))) |> as.data.frame()
    X1   X2   X3 X4   X5   X7   X8   X9  X10
1    A    G    R  F    B    K    J    D    E
2    C    Q <NA>  L    N <NA>    Z    M    H
3    I    Y <NA>  O    V <NA> <NA>    S    P
4 <NA> <NA> <NA>  U    W <NA> <NA>    T <NA>
5 <NA> <NA> <NA>  X <NA> <NA> <NA> <NA> <NA>

也可能:

> split(df, ~gender) |> lapply(`[`, 'name')
$Female
     name
2  Ashley
5   Jenny
9   Emily
10    Lee

$Male
   name
1   Bob
3 James
4 David
6  Hans
7   Leo
8  John

也许你想考虑一下

> split(df$name, df$gender)
$Female
[1] "Ashley" "Jenny"  "Emily"  "Lee"   

$Male
[1] "Bob"   "James" "David" "Hans"  "Leo"   "John" 

> split(df$name, df$gender) |> lapply(s或t)
$Female
[1] "Ashley" "Emily"  "Jenny"  "Lee"   

$Male
[1] "Bob"   "David" "Hans"  "James" "John"  "Leo"  

Data:

> dput(df)
structure(list(id = 1:10, name = c("Bob", "Ashley", "James", 
"David", "Jenny", "Hans", "Leo", "John", "Emily", "Lee"), gender = c("Male", 
"Female", "Male", "Male", "Female", "Male", "Male", "Male", "Female", 
"Female")), class = "data.frame", row.names = c(NA, -10L))

R相关问答推荐

如何从使用lapply()的r中的拆分数据帧中删除多个部分?

逐行替代引用前一行的for循环

如何将图案添加到ggplot中的一个类别

使用lares::corr_var函数在for循环中分配变量的问题

指定要保留在wrap_plots中的传奇

查找满足SpatRaster中条件的单元格位置

使用spatVector裁剪网格数据时出现的问题

在ggplot Likert条中添加水平线

Tidyverse/Djirr为从嵌套列表中提取的列名赋值的解决方案

如何在xyplot中 for each 面板打印R^2

如何删除gggvenn与gggplot绘制的空白?

更改默认系列1以更改名称

derrr mutate case_when grepl不能在R中正确返回值

用关联字符串替换列名的元素

以NA为通配符的R中的FULL_JOIN以匹配其他数据中的任何值.Frame

识别连接的子网(R-igraph)

在R中的数据框上使用Apply()函数时,如何保留非数字列?

循环遍历多个变量,并将每个变量插入函数R

R中治疗序列的相对时间指数

名字的模糊匹配