r - 如何根据类提取非因子列的唯一值
问题描述
我正在创建一个data.frame
作为codebook
现有的data.frame
一个,其中一列codebook
是现有的每一列中的值范围data.frame
。我需要从以下列填充每个唯一值class
:character
用“/”分隔它们
1)我尝试使用条件是列的并且是的if else
语句class
function
unique()
2)我也使用了该if else
语句并获取了列的第一个元素(x[1]
用作函数)并收到了预期的输出
dat
是现有的数据框
function(dat){
dfr <- data.frame(
row.names = c(1:length(colnames(dat))),
ColumnNames = names(dat),
class = sapply(dat, class),
Range = sapply(dat, function(x)
if(class(x) == "character")
paste(unique(x), sep = " / ")
else if(class(x) == "numeric" || class(x) == "integer")
paste(min(x), max(x), sep = " - ")
else
class(x)),```
function(dat){
dfr <- data.frame(
row.names = c(1:length(colnames(dat))),
ColumnNames = names(dat),
class = sapply(dat, class),
Range = sapply(dat, function(x)
if(class(x) == "character")
x[1]
else if(class(x) == "numeric" || class(x) == "integer")
paste(min(x), max(x), sep = " - ")
else
class(x)),```
我希望输出data.frame
能够说明我在 Range 列下需要的唯一值,但是我收到以下错误消息:
Error in data.frame(row.names = c(1:length(colnames(dat))), ColumnNames =
names(dat), :
arguments imply differing number of rows: 68, 6```
但是,当我使用 x[1] 作为函数时,它按预期返回了列的第一个元素
解决方案
在 OP 的第一个函数中
paste(unique(x), sep = " / ")
返回与输入 ( ) 相同的输出unique(x)
,可以是长度大于 1 的向量。它是函数中唯一可以返回长度大于 1 的向量的行。代码可以更改为
paste(unique(x), collapse = " / ")
差异是可重现的
paste(1:3, sep=' / ')
#[1] "1" "2" "3" # returns the same length
paste(1:3, collapse=" / ")
#[1] "1 / 2 / 3" # single string
推荐阅读
- ios - iOS 中的内存泄漏 Kotlin Native 库
- c# - Sharepoint online - 不返回列表中特定视图中的项目
- javascript - 是否可以让 loading = 'lazy' 在X 轴上工作?
- reactjs - 可以在同一 Redux 状态的不同分支中重用的 Reducer?
- python - 是否可以从 QListView 重新排序 QSqlTableModel?
- laravel - 无法通过getter vuex vuejs访问状态
- c++ - 优化(重新编译)继承每个派生类的虚方法
- python - 使用 unittest 从函数运行测试
- javascript - 如何仅在 Angular9 中使用 Date() 和 DatePipe() 获取日期范围?
- apache-spark - 替换字符串列的多个值