R 将字符串的出现分组到一行
tl;dr 有没有一种方法可以将大量值分组到一个列中,而不截断这些值R 将字符串的出现分组到一行,r,plyr,R,Plyr,tl;dr 有没有一种方法可以将大量值分组到一个列中,而不截断这些值 我正在研究RStudio上有48178个条目的数据帧。数据框有两列,第一列包含唯一的数值,另一列包含重复的字符串 ---------- id name 1 forest 2 forest 3 park 4 riverbank . . . . . 48178 water ---------- 我想根据第二栏中唯一的条目将所有条目分组。我使用了包“ddply”来实现这个结果。我现在有以
我正在研究RStudio上有48178个条目的数据帧。数据框有两列,第一列包含唯一的数值,另一列包含重复的字符串
----------
id name
1 forest
2 forest
3 park
4 riverbank
.
.
.
.
.
48178 water
----------
我想根据第二栏中唯一的条目将所有条目分组。我使用了包“ddply”来实现这个结果。我现在有以下派生表:
----------
type V1
forest forest,forest,forest
park park,park,park,park
riverbank riverbank,riverbank,
water water,water,water,water
----------
但是,在对派生数据帧应用str
函数时,我发现该列包含截断值,而不是每个字符串的每个实例
str
的输出为:
'data.frame': 4 obs. of 2 variables:
$ type: chr "forest" "park" "riverbank" "water"
$ V1 : chr "forest,forest,forest,forest,forest,forest,forest,forest,forest,forest,forest,forest,forest,forest,forest,forest,forest,forest,f"| __truncated__ "park,park,park,park,park,park,park,park,park,park,park,park,park,park,park,park,park,park,park,park,park,park,park,park,park,pa"| __truncated__ "riverbank,riverbank,riverbank,riverbank,riverbank,riverbank,riverbank,riverbank,riverbank,riverbank,riverbank,riverbank,riverba"| __truncated__ "water,water,water,water,water,water,water,water,water,water,water,water,water,water,water,water,water,water,water,water,water,w"| __truncated__`
如何将相同的字符串组合在一起并将它们推到一行,而不进行截断?如果您只需要发生次数,那么为什么不简单地使用
表
df<- read.table(head=T, text="id name
1 forest
2 forest
3 park
4 riverbank")
df
df1<- as.data.frame(table(df$name))
#will give you number of times the word occurs
# if for some reason you want a repetition,then
x<- mapply(rep,df1$Var1,df1$Freq)
y<- sapply(x,paste, collapse=",")
data.frame(type=df1$Var1, V1=y)
df如果您想要的只是发生次数,那么为什么不简单地使用表
df<- read.table(head=T, text="id name
1 forest
2 forest
3 park
4 riverbank")
df
df1<- as.data.frame(table(df$name))
#will give you number of times the word occurs
# if for some reason you want a repetition,then
x<- mapply(rep,df1$Var1,df1$Freq)
y<- sapply(x,paste, collapse=",")
data.frame(type=df1$Var1, V1=y)
df尝试使用base R split()函数将结果存储在列表中:
new.list <- split(df, f=df$type)
new.list尝试使用base R split()函数将结果存储在列表中:
new.list <- split(df, f=df$type)
new.list您的字符串并没有真正被截断,只有str
显示的字符串被截断:
size <- 48000
df <- data.frame(1:size,
type=sample(c("forest", "park", "riverbank", "water" ),
size, replace = TRUE),
stringsAsFactors = FALSE)
res <- by(df$type , df$type, paste, collapse=",")
str(res)
'by' chr [1:4(1d)] "forest,forest,forest,forest,forest,forest,forest,forest,forest,forest,forest,forest,forest,forest,forest,forest,forest,forest,f"| __truncated__ ...
- attr(*, "dimnames")=List of 1
..$ df$type: chr [1:4] "forest" "park" "riverbank" "water"
- attr(*, "call")= language by.default(data = df$type, INDICES = df$type, FUN = paste, collapse = ",")
lengths( strsplit(res, ','))
forest park riverbank water
11993 12017 11953 12037
sum(lengths( strsplit(res, ',')))
[1] 48000
size您的字符串并没有真正被截断,只有str
显示的字符串被截断:
size <- 48000
df <- data.frame(1:size,
type=sample(c("forest", "park", "riverbank", "water" ),
size, replace = TRUE),
stringsAsFactors = FALSE)
res <- by(df$type , df$type, paste, collapse=",")
str(res)
'by' chr [1:4(1d)] "forest,forest,forest,forest,forest,forest,forest,forest,forest,forest,forest,forest,forest,forest,forest,forest,forest,forest,f"| __truncated__ ...
- attr(*, "dimnames")=List of 1
..$ df$type: chr [1:4] "forest" "park" "riverbank" "water"
- attr(*, "call")= language by.default(data = df$type, INDICES = df$type, FUN = paste, collapse = ",")
lengths( strsplit(res, ','))
forest park riverbank water
11993 12017 11953 12037
sum(lengths( strsplit(res, ',')))
[1] 48000
size扩展HubertL的答案,str()
函数完全按照它应该做的去做,但是对于您想要做的事情来说,它可能是一个错误的选择
从您在Q中提供的(相当有限的)信息来看,您似乎已经实现了所需的功能,即连接相同类型的所有字符串
但是,您似乎被str()
函数的输出卡住了。
请参阅帮助页面?str
从“说明”部分:
简洁地显示R对象的内部结构、诊断功能和摘要
(在某种程度上,dput
)的替代方案。理想情况下,每个“基本”结构只显示一行。它特别适合紧凑地显示(可能是嵌套的)列表的(缩写)内容。其思想是为任何R对象提供合理的输出
str()
有一个默认为128的参数nchar.max
nchar.max
为字符
字符串显示的最大字符数。较长的字符串被截断,请参见下面的longch
示例
示例部分中的longch
示例说明了此参数的效果:
nchar(longch <- paste(rep(letters,100), collapse = ""))
#[1] 2600
str(longch)
# chr "abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvw"| __truncated__
str(longch, nchar.max = 52)
# chr "abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxy"| __truncated__
nchar(longch扩展HubertL的答案,str()
从您在Q中提供的(相当有限的)信息来看,您似乎已经实现了所需的功能,即连接相同类型的所有字符串
但是,您似乎被str()
函数的输出卡住了。
请参阅帮助页面?str
从“说明”部分:
紧凑地显示R对象的内部结构、诊断功能和摘要
(在某种程度上还有dput
)的替代方案。理想情况下,每个“基本”结构只显示一行。它特别适合紧凑地显示(可能嵌套)的(缩写)内容目的是为任何R对象提供合理的输出
str()
有一个默认为128的参数nchar.max
nchar.max
为字符
字符串显示的最大字符数。较长的字符串将被截断,请参见下面的longch
示例
示例部分中的longch
示例说明了此参数的效果:
nchar(longch <- paste(rep(letters,100), collapse = ""))
#[1] 2600
str(longch)
# chr "abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvw"| __truncated__
str(longch, nchar.max = 52)
# chr "abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxy"| __truncated__
nchar(longch试试这个:sapply(strsplit(as.character(df$name)),split=',,length)
应该可以!问题是我们试图从中获取计数的列中存在截断值。我希望将该字符的所有实例分组在一起,我想由于空间限制,数据框会截断这些实例。让我们来看看。请在您的问题中编辑任何其他信息(而不是评论)。另外,请让您的示例重现。帮助他人帮助您。请尝试以下操作:sapply(strsplit(as.character(df$name),split=','),length)
应该可以!问题是我们试图从中获取计数的列中存在截断值。我希望将该字符的所有实例分组在一起,我想由于空间限制,数据框会截断这些实例。让我们来看看。请在您的问题中编辑任何其他信息(而不是评论).另外,请让你所有的例子都可以复制。帮助他人帮助你。