2016-09-30 210 views
0

我在Python中编写算法时遇到了麻烦,这不会是个大问题,但是r的语法已经把我抛弃了。 我想设置z和num等于eachother的第一个索引并将其放入列表中。 一旦在列表中,我想打印一个负数的字母。 然后我想打印对应于j k l的数字。r嵌套循环

nums<-c(1.0, 3.0, -2, 8, -4, 4, 2, -3, 9, 1, 4, 2, 2, 1, 8, 2) 
z<-c("a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p") 
lets<-c(j,k,l) 
for (i in nums){ 
for(j in z) { 
}} 
list=((a,1),(b,3),(c,-2),(d,8),(e,-4),(f,4),(g,2),(h,-3),(i,9),(j,1),(k,4),(l,2),(m,2),(n,1),(o,8),(p,2)) 

negative=c,e,h, 
letters=1,4,2 
+1

'z [nums <0]'和'nums [z%in%lets]'?你错过了你信件的引号 – Cath

+2

仅供参考你也可以做'setNames(nums,z)' – Sotos

回答

2

你可以做的是(使用你的数据):

df <- data.frame(z,nums, stringsAsFactors = FALSE) 

有所有在

> df 
    z nums 
1 a 1 
2 b 3 
3 c -2 
4 d 8 
5 e -4 
6 f 4 
7 g 2 
8 h -3 
9 i 9 
10 j 1 
11 k 4 
12 l 2 
13 m 2 
14 n 1 
15 o 8 
16 p 2 

字母和NUMS然后你就可以访问你什么都想要:

df$z[df$nums<0] 

结果于:

[1] "c" "e" "h" 

而要获得J,K,L,你可以使用grepl数量:你有一次一个子数据帧或只是数字

df[grepl("[j,k,l]", df$z),] 
    z nums 
10 j 1 
11 k 4 
12 l 2 

然后做:

df$nums[grepl("[j,k,l]", df$z)] 
[1] 1 4 2 
+0

这是完美的。我可以循环查看一个列表吗?如果我想测试偶数并打印它是真是假 –

+1

您可以将sup data.frame存储为: 'sub.data < - df [df $ nums <0,]' 哪给出你,数据框只是由c,e和h的行组成 –

+2

@WilliamBernard你为什么要循环?所有这些操作都是在R中矢量化的,不需要为了学习而循环 – Cath