这里是一个有 100000 行的例子(这里从 A 到 Z 设置职业):
> a = data.frame(sex=sample(c("M", "F"), 100000, replace=T), occupation=sample(LETTERS, 100000, replace=T))
> sum(a$sex == "M" & a$occupation=="A")
[1] 1882
返回职业为“A”的男性人数。
编辑
我从您的评论中了解到,您想要计算所有可能的性别和职业组合。
所以首先创建一个包含所有组合的数据框:
combns = expand.grid(c("M", "F"), LETTERS)
并使用apply 循环以求和您的标准并将结果附加到combns:
combns = cbind (combns, apply(combns, 1, function(x)sum(a$sex==x[1] & a$occupation==x[2])))
colnames(combns) = c("sex", "occupation", "count")
结果的第一行如下所示:
sex occupation count
1 M A 1882
2 F A 1869
3 M B 1866
4 F B 1904
5 M C 1979
6 F C 1910
这能解决您的问题吗?
或:
thelatemai 建议的更简单的解决方案:
table(a$sex, a$occupation)
A B C D E F G H I J K L M N O
F 1869 1904 1910 1907 1894 1940 1964 1907 1918 1892 1962 1933 1886 1960 1972
M 1882 1866 1979 1904 1895 1845 1946 1905 1999 1994 1933 1950 1876 1856 1911
P Q R S T U V W X Y Z
F 1908 1907 1883 1888 1943 1922 2016 1962 1885 1898 1889
M 1928 1938 1916 1927 1972 1965 1946 1903 1965 1974 1906