TL;博士 有没有办法将大量值组合到一个列而不截断这些值?
我正在研究RStudio上有48,178个条目的数据框。数据框有2列,其中第一列包含唯一的数值,另一列包含重复的字符串。
----------
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__`
如何将相同的字符串组合在一起并将它们连接到一行而不截断?
答案 0 :(得分:1)
尝试使用base R split()函数将结果存储在列表中:
new.list <- split(df, f=df$type)
这会将数据帧拆分为多个数据帧,可以使用方括号进行访问。它使字符串不会被合并和截断,因为记录继续保存在不同的单元格中。
答案 1 :(得分:1)
您的字符串不会被截断,只有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
答案 2 :(得分:1)
扩展 HubertL 的答案,str()
函数完全符合预期,但对于您打算做的事情可能是错误的选择。
根据您在Q 中提供的(相当有限的)信息,您似乎已经实现了所需的信息,即连接相同类型的所有字符串。
但是,您似乎仍然坚持?str
功能的输出。
请参阅帮助页summary
。
来自描述部分:
紧凑地显示R对象的内部结构,诊断功能以及
dput
(在某种程度上,str()
)的替代方案。理想情况下,每个“基本”结构只显示一行。它特别适合紧凑地显示(可能是嵌套的)列表的(缩写)内容。我们的想法是为任何R对象提供合理的输出。
nchar.max
有一个参数nchar.max
,默认为128。
character
要为longch
字符串显示的最大字符数。更长的字符串会被截断,请参阅下面的longch
示例。
示例部分中的nchar(longch <- paste(rep(letters,100), collapse = ""))
#[1] 2600
str(longch)
# chr "abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvw"| __truncated__
str(longch, nchar.max = 52)
# chr "abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxy"| __truncated__
示例说明了此参数的效果:
?"Memory-limits"
根据name
,字符串中的字节数限制为2 ^ 31 - 1~2 * 10 ^ 9 。给定数据框中的行数和select distinct office from Locations
where office NOT IN
(
select office from Locations
where zip NOT IN (45220, 45221, 45214)
)
and zip IN (45220, 45221, 45214)
的长度,连接的字符串不会超过0.6 * 10 ^ 6,这远远不是限制。
答案 3 :(得分:0)
如果您想要的只是一个计数,那么为什么不简单地使用table
?
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)