我有一个矢量,例如c(1, 3, 4, 5, 9, 10, 17, 29, 30)
,我想将"相邻"元素组合在一起,形成一个规则的连续序列,在一个参差不齐的矢量中导致:
L1:1
L2:3,4,5
L3:9,10
L4:17
L5:29,30
朴素代码(前C程序员):
partition.neighbors <- function(v)
{
result <<- list() #jagged array
currentList <<- v[1] #current series
for(i in 2:length(v))
{
if(v[i] - v [i-1] == 1)
{
currentList <<- c(currentList, v[i])
}
else
{
result <<- c(result, list(currentList))
currentList <<- v[i] #next series
}
}
return(result)
}
Run Code Online (Sandbox Code Playgroud)
现在我明白了
a)R不是C(尽管有大括号)
b)全局变量是纯粹的邪恶
c)这是一种实现结果的非常低效的方法
,欢迎任何更好的解决方案.
我已经读过这个并创建了一个lapply函数来为列表中的每个数据帧添加一个"SubCat"列.
这是我的代码:
my_list <- lapply(1:length(my_list),
function(i) cbind(my_list[[i]], my_list[[i]]["SubCat"] <- as.character("")))
Run Code Online (Sandbox Code Playgroud)
但得到这个错误:
Error in `[<-.data.frame`(`*tmp*`, "SubCat", value = "") :
replacement has 1 row, data has 0
Run Code Online (Sandbox Code Playgroud)
怎么了?
当我使用它时,它在一个数据框架上工作:
my_list[[1]]["SubCat"] <- as.character("")
Run Code Online (Sandbox Code Playgroud)
更新:
这些是我的数据框的示例,它们都包含相同的结构.SKU的一列和类别的一列.
DataFrame 1:
row.names SKU Tv.y.Video
1 1699 2018143169254P Tv.y.Video
2 1700 2018143169254 Tv.y.Video
3 1946 2018144678120P Tv.y.Video
4 1947 2018144678120 Tv.y.Video
5 2366 2018146411831P Tv.y.Video
6 2367 2018146411831 Tv.y.Video
Run Code Online (Sandbox Code Playgroud)
DataFrame 2:
row.names SKU C?mputo
1 6 2004121460000P C?mputo
2 7 2004121460000 C?mputo
3 8 2004121440002P …
Run Code Online (Sandbox Code Playgroud)