Tor*_*ten 2 r unique plyr distinct-values
在我的数据集中是具有多个不同名称的ID.为了检测它们,我建立了这个功能:
ddply(my_dataframe, ~ID_col, summarise, number_of_names = length(unique(names_col)))
Run Code Online (Sandbox Code Playgroud)
这很好用,所以我在第一个col中得到一个带有ID的表,在第二个col中得到不同名称的数量.
因为我需要对几个ID /名称对执行此操作,所以我决定将ddply函数放在函数中.我做了如下:
function_name = function (source, id, name) {
ddply(source, ~id, summarise, number_of_names = length(unique(name)))
Run Code Online (Sandbox Code Playgroud)
不幸的是,当我使用它时会抛出错误:
function_name(my_dataframe, ID_col, names_col)
# Error in unique.default(x) : unique() applies only to vectors
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,它与之前的代码完全相同,但嵌入了具有三个变量的函数中.我迫不及待地想要修复它并且真的期待解决方案.
仅供参考:在我的原始代码中,我没有使用"源"或"名称"而是使用德语单词,因此对于现有的其他功能应该没有问题.我也试过把变量放在引号中.
谢谢你的帮助!
这就是DF有点像:
my_dataframe <- data.frame(
ID_col = c(letters[2:9], letters[3:4]),
names_col = paste0("name-", letters[1:10])
)
Run Code Online (Sandbox Code Playgroud)
有303个ID,但有963个名字.
R始终具有通过使用双方括号按变量名的值选择列的功能.使用tapply你可以这样做:
function_name = function (source, id, name) {
data.frame(
N=tapply(
source[[name]],
my_dataframe[[id]],
function(x){
length(unique(x))
}
)
)
}
Run Code Online (Sandbox Code Playgroud)
然后:
> function_name(my_dataframe,"ID_col","names_col")
N
FU181 2
FU901 1
FU992 1
Run Code Online (Sandbox Code Playgroud)
请注意,名称位于返回数据框的行名称中.
| 归档时间: |
|
| 查看次数: |
135 次 |
| 最近记录: |