我有 2 个列表,每个列表中还有两个包含数据框的列表(换句话说,嵌套列表)。我想绘制每个数据框并根据主列表和嵌套列表的名称为其添加标题。
例如,假设我们有:
a=list(
list(a=data.frame(x=rpois(5,1),y=rpois(5,1)),
b=data.frame(x=rpois(5,1),y=rpois(5,1))),
list(c=data.frame(x=rpois(5,1),y=rpois(5,1)),
d=data.frame(x=rpois(5,1),y=rpois(5,1))))
Run Code Online (Sandbox Code Playgroud)
我们有主要列表的名称:
names(a)=c("alpha","bravo")
Run Code Online (Sandbox Code Playgroud)
在两个主要列表alpha和中bravo,我们还有两个列表charlie和delta:
for(i in 1:length(a)) {
names(a[[i]])=c("charlie","delta") }
Run Code Online (Sandbox Code Playgroud)
我可以用来循环遍历每个列表并绘制数据框,但我无法让标题将每个数据框的主列表(和)和嵌套列表(和)lapply的名称组合起来。例如,在本例中,我想要四个图,分别称为:、、和。alphabravocharliedeltaalpha_charliealpha_deltabravo_charliebravo_delta
lapply(a,function(i) {
lapply(names(i), function(j) {
ggplot()+
geom_point(data=i[[j]],aes(x,y))+
opts(title=paste(names(i),j,sep="_")) #Here is where I am struggling!
} ) } )
Run Code Online (Sandbox Code Playgroud)
任何帮助将非常感激。谢谢你!
我有一列1:1000的数字.我想在每个数字的前面附加标签"s",以便每个单元格中的字符总数保持不变.例如,"1"将变为"s0001","15"将变为"s0015","620"将变为"s0620",并且"1000"将变为"s1000".
我试图使用嵌套if else语句来完成此操作,但我不断收到条件长度> 1且只使用第一个元素的错误.
这是一个示例数据集和我正在使用的代码:
df=data.frame(code=seq(1:1000))
df$code=
if (df$code < 10) { df$code=paste("s000",df$code,sep="") } else
if (100 > df$code & df$code >= 10) { df$code=paste("s00",df$code,sep=="") } else
if (1000 > df$code & df$code >= 100) { df$code=paste("s0",df$code,sep="") } else
{ df$code=paste("s",df$code,sep="") }
Run Code Online (Sandbox Code Playgroud)
我怀疑有一种更简单的方法可以不使用它if else.有什么想法吗?
谢谢!
解
感谢Joran!如果x是非连续整数:
d=data.frame(x=sample(1:1000,500))
d$nc=nchar(d$x)
ddply(d,.(nc),transform,lab = paste("s",paste(rep("0",4-unique(nc)),collapse = ""),x,sep = ""))
Run Code Online (Sandbox Code Playgroud) 我想生成两个向量的所有组合,给定两个约束:第一个向量中永远不能超过3个字符,并且第二个向量中必须始终至少有一个字符.我还想改变组合中的最终字符数.
例如,这里有两个向量:
vec1=c("A","B","C","D")
vec2=c("W","X","Y","Z")
Run Code Online (Sandbox Code Playgroud)
说我想在组合中使用3个字符.可能的可接受的排列是:"A" "B" "X"或"A" "Y" "Z".不可接受的排列是:"A" "B" "C"因为至少有一个字符来自vec2.
现在说我想要组合中的5个字符.可能的可接受的排列是:"A" "C" "Z" "Y"或"A" "Y" "Z" "X".一个不可接受的排列将是:"A" "C" "D" "B" "X"因为有超过3个字符vec2.
我想我可以使用expand.grid生成所有组合,然后以某种方式子集,但必须有一个更简单的方法.提前致谢!
我有一个包含两列的数据框.第一列定义数据的子集.我想在第二列中找到仅出现在第一列中的一个子集中的所有值.
例如,来自:
df=data.frame(
data_subsets=rep(LETTERS[1:2],each=5),
data_values=c(1,2,3,4,5,2,3,4,6,7))
data_subsets data_values
A 1
A 2
A 3
A 4
A 5
B 2
B 3
B 4
B 6
B 7
Run Code Online (Sandbox Code Playgroud)
我想提取以下数据框.
data_subsets data_values
A 1
A 5
B 6
B 7
Run Code Online (Sandbox Code Playgroud)
我一直在玩,duplicated但我似乎无法使它工作.任何帮助表示赞赏.有很多主题可以解决类似的问题,我希望我的搜索没有忽略答案!
编辑
我修改了@Matthew Lundberg的方法,即计算元素的数量并从数据框中提取.出于某种原因,他的方法不适合我的数据框架,所以我提出了这个,这不太优雅,但完成工作:
counts=rowSums(do.call("rbind",tapply(df$data_subsets,df$data_values,FUN=table)))
extract=names(counts)[counts==1]
df[match(extract,df$data_values),]
Run Code Online (Sandbox Code Playgroud)