2016-09-30 346 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