下面是数据帧df。
ds
a b
1 a f
2 a d
3 b g
4 b g
当我尝试使用table(ds$b,ds$a)
时,我会得到
a b
d 1 0
f 1 0
g 0 2
但是我只需要像下面这样
a b
d 1 0
f 1 0
g 0 1
是否可以通过表函数获取它
答案 0 :(得分:2)
您可以使用pmin
在0到1之间设置范围。
pmin(table(ds$b,ds$a), 1)
# a b
# d 1 0
# f 1 0
# g 0 1
或在unique
之前使用table
:
table(unique(ds)[2:1])
#b a b
# d 1 0
# f 1 0
# g 0 1
数据:
ds <- data.frame(a=c("a","a","b","b"), b=c("f","d","g","g"))
答案 1 :(得分:2)
至少一种方法是:
ifelse(table(ds$b,ds$a) > 0, 1, 0)
a b
d 1 0
f 1 0
g 0 1
答案 2 :(得分:1)
使用tidyverse
library(dplyr)
library(tidyr)
ds %>%
distinct %>%
mutate(n = 1) %>%
pivot_wider(names_from = b, values_from = n, values_fill = list(n = 0))
# A tibble: 2 x 4
# a f d g
# <fct> <dbl> <dbl> <dbl>
#1 a 1 1 0
#2 b 0 0 1